Recursion, Induction and Rewriting

In this notebook, we're going to use Imandra to prove some interesting properties of functional programs. We'll learn a bit about induction, lemmas and rewrite rules along the way.

Let's start by defining our own append function on lists. It should take two lists as input, and compute the result of appending (concatenating) the elements of the first list with those of the second list.

Note: Imandra contains a List module with predefined functions like List.append (i.e., (@)), List.rev, etc. However, we define our own versions of these functions by hand in this notebook so that all definitions and proofs are illustrated from scratch.

In [1]:
let rec append x y =
 match x with
  | [] -> y
  | x :: xs -> x :: append xs y
Out[1]:
val append : 'a list -> 'a list -> 'a list = <fun>
termination proof

Termination proof

call `append (List.tl x) y` from `append x y`
originalappend x y
subappend (List.tl x) y
original ordinalOrdinal.Int (_cnt x)
sub ordinalOrdinal.Int (_cnt (List.tl x))
path[not Is_a([], x)]
proof
detailed proof
ground_instances3
definitions0
inductions0
search_time
0.070s
details
Expand
smt_stats
num checks7
arith-make-feasible7
arith-max-columns10
rlimit count1551
arith-cheap-eqs1
mk clause11
datatype occurs check12
mk bool var36
arith-lower4
datatype splits1
decisions4
propagations6
arith-max-rows2
conflicts3
datatype accessor ax7
datatype constructor ax5
num allocs643055
final checks4
added eqs26
del clause9
arith eq adapter3
arith-upper5
memory5.050000
max memory5.050000
Expand
  • start[0.070s]
      let (_x_0 : int) = count.list (const 0) x in
      let (_x_1 : ty_0 list) = List.tl x in
      let (_x_2 : int) = count.list (const 0) _x_1 in
      not Is_a([], x) && _x_0 >= 0 && _x_2 >= 0
      ==> Is_a([], _x_1) || Ordinal.( << ) (Ordinal.Int _x_2) (Ordinal.Int _x_0)
  • simplify
    into
    let (_x_0 : ty_0 list) = List.tl x in
    let (_x_1 : int) = count.list (const 0) _x_0 in
    let (_x_2 : int) = count.list (const 0) x in
    (Is_a([], _x_0) || Ordinal.( << ) (Ordinal.Int _x_1) (Ordinal.Int _x_2))
    || not ((not Is_a([], x) && _x_2 >= 0) && _x_1 >= 0)
    expansions
    []
    rewrite_steps
      forward_chaining
      • unroll
        expr
        (|`count.list (const 0)[0]`_1698| x_1685)
        expansions
        • unroll
          expr
          (|`count.list (const 0)[0]`_1698| (|get.::.1_1679| x_1685))
          expansions
          • unroll
            expr
            (|Ordinal.<<_126| (|Ordinal.Int_111|
                                (|`count.list (const 0)[0]`_1698| (|get.::.…
            expansions
            • Unsat

            Let's compute a bit with this function to understand how it works.

            In [2]:
            append [1;2;3] [4;5;6]
            
            Out[2]:
            - : int list = [1;2;3;4;5;6]
            
            In [3]:
            append [] [4;5;6]
            
            Out[3]:
            - : int list = [4;5;6]
            
            In [4]:
            append [1;2;3] []
            
            Out[4]:
            - : int list = [1;2;3]
            

            We can ask Imandra some questions about append. For example, do there exist lists x and y such that append x y = [1;2;3;4;5;6;7;8]?

            In [5]:
            verify (fun x y -> append x y <> [1;2;3;4;5;6;7;8])
            
            Out[5]:
            - : int list -> int list -> bool = <fun>
            module CX : sig val x : int list val y : int list end
            
            Counterexample (after 1 steps, 0.011s):
             let (x : int list) = []
             let (y : int list) = [1; 2; 3; 4; 5; 6; 7; 8]
            
            Refuted
            proof attempt
            ground_instances1
            definitions0
            inductions0
            search_time
            0.011s
            details
            Expand
            smt_stats
            num checks3
            arith-make-feasible2
            arith-max-columns11
            rlimit count850
            mk clause3
            datatype occurs check28
            mk bool var28
            datatype splits1
            decisions2
            propagations2
            conflicts1
            datatype accessor ax10
            datatype constructor ax2
            num allocs2490070
            final checks3
            added eqs25
            memory5.300000
            max memory5.300000
            Expand
            • start[0.011s] not (append ( :var_0: ) ( :var_1: ) = [1; 2; 3; 4; 5; 6; 7; 8])
            • unroll
              expr
              (append_1731 x_22 y_23)
              expansions
              • Sat (Some let (x : int list) = [] let (y : int list) = [1; 2; 3; 4; 5; 6; 7; 8] )

              Ah, of course! What if we make the problem a little harder -- perhaps we want x and y to be the same length:

              In [6]:
              verify (fun x y -> List.length x = List.length y ==> append x y <> [1;2;3;4;5;6;7;8])
              
              Out[6]:
              - : int list -> int list -> bool = <fun>
              module CX : sig val x : int list val y : int list end
              
              Counterexample (after 15 steps, 0.034s):
               let (x : int list) = [1; 2; 3; 4]
               let (y : int list) = [5; 6; 7; 8]
              
              Refuted
              proof attempt
              ground_instances15
              definitions0
              inductions0
              search_time
              0.034s
              details
              Expand
              smt_stats
              num checks31
              arith-assume-eqs4
              arith-make-feasible153
              arith-max-columns44
              arith-conflicts3
              rlimit count16748
              arith-cheap-eqs187
              mk clause391
              datatype occurs check334
              mk bool var1128
              arith-lower171
              arith-diseq57
              datatype splits26
              decisions365
              arith-propagations25
              propagations1450
              interface eqs4
              arith-bound-propagations-cheap25
              arith-max-rows23
              conflicts91
              datatype accessor ax121
              minimized lits47
              arith-bound-propagations-lp53
              datatype constructor ax276
              num allocs4581813
              final checks39
              added eqs2708
              del clause145
              arith eq adapter216
              arith-upper189
              time0.002000
              memory8.660000
              max memory8.660000
              Expand
              • start[0.034s]
                  List.length ( :var_0: ) = List.length ( :var_1: )
                  ==> not (append ( :var_0: ) ( :var_1: ) = [1; 2; 3; 4; 5; 6; 7; 8])
              • simplify

                into
                not (List.length ( :var_0: ) = List.length ( :var_1: ))
                || not (append ( :var_0: ) ( :var_1: ) = [1; 2; 3; 4; 5; 6; 7; 8])
                expansions
                []
                rewrite_steps
                  forward_chaining
                  • unroll
                    expr
                    (append_1748 x_25 y_26)
                    expansions
                    • unroll
                      expr
                      (|List.length_1744| y_26)
                      expansions
                      • unroll
                        expr
                        (|List.length_1744| x_25)
                        expansions
                        • unroll
                          expr
                          (append_1748 (|get.::.1_1743| x_25) y_26)
                          expansions
                          • unroll
                            expr
                            (|List.length_1744| (|get.::.1_1743| y_26))
                            expansions
                            • unroll
                              expr
                              (|List.length_1744| (|get.::.1_1743| x_25))
                              expansions
                              • unroll
                                expr
                                (append_1748 (|get.::.1_1743| (|get.::.1_1743| x_25)) y_26)
                                expansions
                                • unroll
                                  expr
                                  (|List.length_1744| (|get.::.1_1743| (|get.::.1_1743| y_26)))
                                  expansions
                                  • unroll
                                    expr
                                    (|List.length_1744| (|get.::.1_1743| (|get.::.1_1743| x_25)))
                                    expansions
                                    • unroll
                                      expr
                                      (append_1748 (|get.::.1_1743| (|get.::.1_1743| (|get.::.1_1743| x_25))) y_26)
                                      expansions
                                      • unroll
                                        expr
                                        (|List.length_1744| (|get.::.1_1743| (|get.::.1_1743| (|get.::.1_1743| y_26))))
                                        expansions
                                        • unroll
                                          expr
                                          (|List.length_1744| (|get.::.1_1743| (|get.::.1_1743| (|get.::.1_1743| x_25))))
                                          expansions
                                          • unroll
                                            expr
                                            (let ((a!1 (|get.::.1_1743| (|get.::.1_1743| (|get.::.1_1743| (|get.::.1_1743| x_25))))))
                                              (append_…
                                            expansions
                                            • unroll
                                              expr
                                              (let ((a!1 (|get.::.1_1743| (|get.::.1_1743| (|get.::.1_1743| (|get.::.1_1743| y_26))))))
                                                (|List.l…
                                              expansions
                                              • unroll
                                                expr
                                                (let ((a!1 (|get.::.1_1743| (|get.::.1_1743| (|get.::.1_1743| (|get.::.1_1743| x_25))))))
                                                  (|List.l…
                                                expansions
                                                • Sat (Some let (x : int list) = [1; 2; 3; 4] let (y : int list) = [5; 6; 7; 8] )

                                                Nice! Remember that counterexamples are always reflected into the runtime in a module called CX. So, we can compute with this counterexample and see that it indeed refutes our conjecture:

                                                In [7]:
                                                append CX.x CX.y
                                                
                                                Out[7]:
                                                - : int list = [1;2;3;4;5;6;7;8]
                                                

                                                Let's now investigate a more interesting conjecture: That append is associative.

                                                That is,

                                                (forall (x,y,z) : 'a list. append x (append y z) = append (append x y) z).

                                                Is this property true? Let's ask Imandra.

                                                In [8]:
                                                verify (fun x y z -> append x (append y z) = append (append x y) z)
                                                
                                                Out[8]:
                                                - : 'a list -> 'a list -> 'a list -> bool = <fun>
                                                
                                                Unknown (Verified up to bound 100)
                                                Expand
                                                expanded
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x)))))))))))))))))))))))))) (append y z)
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x)))))))))))))) y
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (append x y)))))))) z
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl x))))) (append y z)
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (append x y))))))) z
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (append x y)))))))))))))))))) z
                                                • append (List.tl (List.tl (List.tl x))) y
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x)))))))))))))) (append y z)
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (append x y))))))))) z
                                                • append (List.tl (List.tl x)) y
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x))))))))))))) y
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (append x y)))))))))))) z
                                                • append (List.tl (List.tl (List.tl (List.tl x)))) y
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x))))))) y
                                                • append (List.tl (List.tl (List.tl x))) (append y z)
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl y)))))))) z
                                                • append (List.tl (List.tl x)) (append y z)
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (append x y)))))))))))))))) z
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x))))))))))))) (append y z)
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x)))))))))))))))))))))))) y
                                                • append (List.tl (List.tl (List.tl (List.tl x)))) (append y z)
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (append x y)))))))))))))))))))))))))) z
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x))))))))))) y
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl y))))) z
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x))))))) (append y z)
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x))))))))))))))))))))) y
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (append x y)))))))))))))))))))) z
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x)))))))))))))))))))))))) (append y z)
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl y)))))))))))))) z
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x))))))))))))))) y
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x))))))))))) (append y z)
                                                • append (List.tl (List.tl (List.tl (List.tl (append x y))))) z
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (append x y)))))))))))))))))))))))) z
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x))))))))))))))))))))) (append y z)
                                                • append (List.tl (List.tl (List.tl y))) z
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (append x y))))))))))))))))))))))) z
                                                • append (List.tl (List.tl y)) z
                                                • append x y
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x))))))))))))))))))) y
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl y))))))))))))) z
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x))))))))))))))) (append y z)
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (append x y))))))))))))))))))))))))) z
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x)))))))))))))))))) y
                                                • append (List.tl (List.tl (List.tl (List.tl y)))) z
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl y))))))) z
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x)))))))))))))))))))) y
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (append x y))))))))))) z
                                                • append x (append y z)
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x))))))))))))))))))))))) y
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x))))))))))))))))))) (append y z)
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (append x y)))))) z
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x)))))))))))))))))) (append y z)
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x)))))) y
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl y))))))))))) z
                                                • append (List.tl x) y
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x)))))))))))))))))))) (append y z)
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x))))))))))))))))))))))) (append y z)
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x)))))) (append y z)
                                                • append (append x y) z
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl y))))))))))))))) z
                                                • append (List.tl x) (append y z)
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (append x y)))))))))))))) z
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (append x y))))))))))))))))))))) z
                                                • append y z
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl y))))))))))))))))))) z
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x))))))))) y
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl y)))))))))))))))))) z
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x)))))))))))))))) y
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x))))))))) (append y z)
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x)))))))))))))))) (append y z)
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl y)))))) z
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (append x y)))))))))))))))))))))) z
                                                • append (List.tl y) z
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x)))))))))))))))))))))) y
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x))))))))))))))))) y
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (append x y))))))))))))))) z
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x)))))))))))))))))))))) (append y z)
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (append x y))))))))))))))))) z
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x)))))))))) y
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x))))))))))))))))) (append y z)
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x)))))))))))) y
                                                • append (List.tl (List.tl (append x y))) z
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl y))))))))) z
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl y)))))))))))))))) z
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x)))))))))) (append y z)
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x))))))))))))))))))))))))) y
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x)))))))))))) (append y z)
                                                • append (List.tl (append x y)) z
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x))))))))))))))))))))))))) (append y z)
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl y))))))))))))))))) z
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (append x y))))))))))))) z
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl y)))))))))) z
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x)))))))) y
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (append x y)))))))))) z
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x)))))))))))))))))))))))))) y
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl y)))))))))))) z
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl x))))) y
                                                • append (List.tl (List.tl (List.tl (append x y)))) z
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (append x y))))))))))))))))))) z
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x)))))))) (append y z)
                                                blocked
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x))))))))))))))))))))))))))) y
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x))))))))))))))))))))))))))) (append y z)
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl y)))))))))))))))))))) z
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (append x y))))))))))))))))))))))))))) z
                                                proof attempt
                                                ground_instances100
                                                definitions0
                                                inductions0
                                                search_time
                                                0.234s
                                                Expand
                                                • start[0.234s]
                                                    append ( :var_0: ) (append ( :var_1: ) ( :var_2: )) =
                                                    append (append ( :var_0: ) ( :var_1: )) ( :var_2: )
                                                • unroll
                                                  expr
                                                  (append_1737 x_1730 y_1731)
                                                  expansions
                                                  • unroll
                                                    expr
                                                    (append_1737 (append_1737 x_1730 y_1731) z_1732)
                                                    expansions
                                                    • unroll
                                                      expr
                                                      (append_1737 y_1731 z_1732)
                                                      expansions
                                                      • unroll
                                                        expr
                                                        (append_1737 x_1730 (append_1737 y_1731 z_1732))
                                                        expansions
                                                        • unroll
                                                          expr
                                                          (append_1737 (|get.::.1_1729| x_1730) y_1731)
                                                          expansions
                                                          • unroll
                                                            expr
                                                            (append_1737 (|get.::.1_1729| (append_1737 x_1730 y_1731)) z_1732)
                                                            expansions
                                                            • unroll
                                                              expr
                                                              (append_1737 (|get.::.1_1729| x_1730) (append_1737 y_1731 z_1732))
                                                              expansions
                                                              • unroll
                                                                expr
                                                                (append_1737 (|get.::.1_1729| y_1731) z_1732)
                                                                expansions
                                                                • unroll
                                                                  expr
                                                                  (append_1737 (|get.::.1_1729| (|get.::.1_1729| x_1730)) y_1731)
                                                                  expansions
                                                                  • unroll
                                                                    expr
                                                                    (append_1737 (|get.::.1_1729| (|get.::.1_1729| (append_1737 x_1730 y_1731)))
                                                                                 z_1732)
                                                                    expansions
                                                                    • unroll
                                                                      expr
                                                                      (append_1737 (|get.::.1_1729| (|get.::.1_1729| x_1730))
                                                                                   (append_1737 y_1731 z_1732))
                                                                      expansions
                                                                      • unroll
                                                                        expr
                                                                        (append_1737 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| x_1730)))
                                                                                     y_1731)
                                                                        expansions
                                                                        • unroll
                                                                          expr
                                                                          (append_1737 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| x_1730)))
                                                                                       (append_1737 …
                                                                          expansions
                                                                          • unroll
                                                                            expr
                                                                            (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (append_1737 x_1730
                                                                                              …
                                                                            expansions
                                                                            • unroll
                                                                              expr
                                                                              (append_1737 (|get.::.1_1729| (|get.::.1_1729| y_1731)) z_1732)
                                                                              expansions
                                                                              • unroll
                                                                                expr
                                                                                (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| x_1730))))))
                                                                                  (appen…
                                                                                expansions
                                                                                • unroll
                                                                                  expr
                                                                                  (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| x_1730))))))
                                                                                    (appen…
                                                                                  expansions
                                                                                  • unroll
                                                                                    expr
                                                                                    (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (append_1737 x_1730
                                                                                                      …
                                                                                    expansions
                                                                                    • unroll
                                                                                      expr
                                                                                      (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| x_1730))))))
                                                                                        (appen…
                                                                                      expansions
                                                                                      • unroll
                                                                                        expr
                                                                                        (append_1737 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| y_1731)))
                                                                                                     z_1732)
                                                                                        expansions
                                                                                        • unroll
                                                                                          expr
                                                                                          (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| x_1730))))))
                                                                                            (appen…
                                                                                          expansions
                                                                                          • unroll
                                                                                            expr
                                                                                            (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (append_1737 x_1730
                                                                                                              …
                                                                                            expansions
                                                                                            • unroll
                                                                                              expr
                                                                                              (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| x_1730))))))
                                                                                                (appen…
                                                                                              expansions
                                                                                              • unroll
                                                                                                expr
                                                                                                (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| x_1730))))))
                                                                                                  (appen…
                                                                                                expansions
                                                                                                • unroll
                                                                                                  expr
                                                                                                  (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| y_1731))))))
                                                                                                    (appen…
                                                                                                  expansions
                                                                                                  • unroll
                                                                                                    expr
                                                                                                    (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (append_1737 x_1730
                                                                                                                      …
                                                                                                    expansions
                                                                                                    • unroll
                                                                                                      expr
                                                                                                      (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| x_1730))))))
                                                                                                        (appen…
                                                                                                      expansions
                                                                                                      • unroll
                                                                                                        expr
                                                                                                        (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| x_1730))))))
                                                                                                          (appen…
                                                                                                        expansions
                                                                                                        • unroll
                                                                                                          expr
                                                                                                          (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (append_1737 x_1730
                                                                                                                            …
                                                                                                          expansions
                                                                                                          • unroll
                                                                                                            expr
                                                                                                            (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| y_1731))))))
                                                                                                              (appen…
                                                                                                            expansions
                                                                                                            • unroll
                                                                                                              expr
                                                                                                              (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| x_1730))))))
                                                                                                              (let ((a…
                                                                                                              expansions
                                                                                                              • unroll
                                                                                                                expr
                                                                                                                (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| x_1730))))))
                                                                                                                (let ((a…
                                                                                                                expansions
                                                                                                                • unroll
                                                                                                                  expr
                                                                                                                  (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (append_1737 x_1730
                                                                                                                                    …
                                                                                                                  expansions
                                                                                                                  • unroll
                                                                                                                    expr
                                                                                                                    (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| x_1730))))))
                                                                                                                    (let ((a…
                                                                                                                    expansions
                                                                                                                    • unroll
                                                                                                                      expr
                                                                                                                      (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| y_1731))))))
                                                                                                                        (appen…
                                                                                                                      expansions
                                                                                                                      • unroll
                                                                                                                        expr
                                                                                                                        (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| x_1730))))))
                                                                                                                        (let ((a…
                                                                                                                        expansions
                                                                                                                        • unroll
                                                                                                                          expr
                                                                                                                          (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (append_1737 x_1730
                                                                                                                                            …
                                                                                                                          expansions
                                                                                                                          • unroll
                                                                                                                            expr
                                                                                                                            (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| x_1730))))))
                                                                                                                            (let ((a…
                                                                                                                            expansions
                                                                                                                            • unroll
                                                                                                                              expr
                                                                                                                              (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| x_1730))))))
                                                                                                                              (let ((a…
                                                                                                                              expansions
                                                                                                                              • unroll
                                                                                                                                expr
                                                                                                                                (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| y_1731))))))
                                                                                                                                  (appen…
                                                                                                                                expansions
                                                                                                                                • unroll
                                                                                                                                  expr
                                                                                                                                  (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (append_1737 x_1730
                                                                                                                                                    …
                                                                                                                                  expansions
                                                                                                                                  • unroll
                                                                                                                                    expr
                                                                                                                                    (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| x_1730))))))
                                                                                                                                    (let ((a…
                                                                                                                                    expansions
                                                                                                                                    • unroll
                                                                                                                                      expr
                                                                                                                                      (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| x_1730))))))
                                                                                                                                      (let ((a…
                                                                                                                                      expansions
                                                                                                                                      • unroll
                                                                                                                                        expr
                                                                                                                                        (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (append_1737 x_1730
                                                                                                                                                          …
                                                                                                                                        expansions
                                                                                                                                        • unroll
                                                                                                                                          expr
                                                                                                                                          (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| y_1731))))))
                                                                                                                                          (let ((a…
                                                                                                                                          expansions
                                                                                                                                          • unroll
                                                                                                                                            expr
                                                                                                                                            (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| x_1730))))))
                                                                                                                                            (let ((a…
                                                                                                                                            expansions
                                                                                                                                            • unroll
                                                                                                                                              expr
                                                                                                                                              (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| x_1730))))))
                                                                                                                                              (let ((a…
                                                                                                                                              expansions
                                                                                                                                              • unroll
                                                                                                                                                expr
                                                                                                                                                (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (append_1737 x_1730
                                                                                                                                                                  …
                                                                                                                                                expansions
                                                                                                                                                • unroll
                                                                                                                                                  expr
                                                                                                                                                  (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| x_1730))))))
                                                                                                                                                  (let ((a…
                                                                                                                                                  expansions
                                                                                                                                                  • unroll
                                                                                                                                                    expr
                                                                                                                                                    (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| y_1731))))))
                                                                                                                                                    (let ((a…
                                                                                                                                                    expansions
                                                                                                                                                    • unroll
                                                                                                                                                      expr
                                                                                                                                                      (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| x_1730))))))
                                                                                                                                                      (let ((a…
                                                                                                                                                      expansions
                                                                                                                                                      • unroll
                                                                                                                                                        expr
                                                                                                                                                        (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (append_1737 x_1730
                                                                                                                                                                          …
                                                                                                                                                        expansions
                                                                                                                                                        • unroll
                                                                                                                                                          expr
                                                                                                                                                          (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| x_1730))))))
                                                                                                                                                          (let ((a…
                                                                                                                                                          expansions
                                                                                                                                                          • unroll
                                                                                                                                                            expr
                                                                                                                                                            (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| x_1730))))))
                                                                                                                                                            (let ((a…
                                                                                                                                                            expansions
                                                                                                                                                            • unroll
                                                                                                                                                              expr
                                                                                                                                                              (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| y_1731))))))
                                                                                                                                                              (let ((a…
                                                                                                                                                              expansions
                                                                                                                                                              • unroll
                                                                                                                                                                expr
                                                                                                                                                                (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (append_1737 x_1730
                                                                                                                                                                                  …
                                                                                                                                                                expansions
                                                                                                                                                                • unroll
                                                                                                                                                                  expr
                                                                                                                                                                  (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| x_1730))))))
                                                                                                                                                                  (let ((a…
                                                                                                                                                                  expansions
                                                                                                                                                                  • unroll
                                                                                                                                                                    expr
                                                                                                                                                                    (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| x_1730))))))
                                                                                                                                                                    (let ((a…
                                                                                                                                                                    expansions
                                                                                                                                                                    • unroll
                                                                                                                                                                      expr
                                                                                                                                                                      (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (append_1737 x_1730
                                                                                                                                                                                        …
                                                                                                                                                                      expansions
                                                                                                                                                                      • unroll
                                                                                                                                                                        expr
                                                                                                                                                                        (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| y_1731))))))
                                                                                                                                                                        (let ((a…
                                                                                                                                                                        expansions
                                                                                                                                                                        • unroll
                                                                                                                                                                          expr
                                                                                                                                                                          (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| x_1730))))))
                                                                                                                                                                          (let ((a…
                                                                                                                                                                          expansions
                                                                                                                                                                          • unroll
                                                                                                                                                                            expr
                                                                                                                                                                            (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| x_1730))))))
                                                                                                                                                                            (let ((a…
                                                                                                                                                                            expansions
                                                                                                                                                                            • unroll
                                                                                                                                                                              expr
                                                                                                                                                                              (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (append_1737 x_1730
                                                                                                                                                                                                …
                                                                                                                                                                              expansions
                                                                                                                                                                              • unroll
                                                                                                                                                                                expr
                                                                                                                                                                                (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| x_1730))))))
                                                                                                                                                                                (let ((a…
                                                                                                                                                                                expansions
                                                                                                                                                                                • unroll
                                                                                                                                                                                  expr
                                                                                                                                                                                  (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| y_1731))))))
                                                                                                                                                                                  (let ((a…
                                                                                                                                                                                  expansions
                                                                                                                                                                                  • unroll
                                                                                                                                                                                    expr
                                                                                                                                                                                    (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| x_1730))))))
                                                                                                                                                                                    (let ((a…
                                                                                                                                                                                    expansions
                                                                                                                                                                                    • unroll
                                                                                                                                                                                      expr
                                                                                                                                                                                      (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (append_1737 x_1730
                                                                                                                                                                                                        …
                                                                                                                                                                                      expansions
                                                                                                                                                                                      • unroll
                                                                                                                                                                                        expr
                                                                                                                                                                                        (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| x_1730))))))
                                                                                                                                                                                        (let ((a…
                                                                                                                                                                                        expansions
                                                                                                                                                                                        • unroll
                                                                                                                                                                                          expr
                                                                                                                                                                                          (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| x_1730))))))
                                                                                                                                                                                          (let ((a…
                                                                                                                                                                                          expansions
                                                                                                                                                                                          • unroll
                                                                                                                                                                                            expr
                                                                                                                                                                                            (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| y_1731))))))
                                                                                                                                                                                            (let ((a…
                                                                                                                                                                                            expansions
                                                                                                                                                                                            • unroll
                                                                                                                                                                                              expr
                                                                                                                                                                                              (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (append_1737 x_1730
                                                                                                                                                                                                                …
                                                                                                                                                                                              expansions
                                                                                                                                                                                              • unroll
                                                                                                                                                                                                expr
                                                                                                                                                                                                (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| x_1730))))))
                                                                                                                                                                                                (let ((a…
                                                                                                                                                                                                expansions
                                                                                                                                                                                                • unroll
                                                                                                                                                                                                  expr
                                                                                                                                                                                                  (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| x_1730))))))
                                                                                                                                                                                                  (let ((a…
                                                                                                                                                                                                  expansions
                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                    expr
                                                                                                                                                                                                    (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (append_1737 x_1730
                                                                                                                                                                                                                      …
                                                                                                                                                                                                    expansions
                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                      expr
                                                                                                                                                                                                      (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| y_1731))))))
                                                                                                                                                                                                      (let ((a…
                                                                                                                                                                                                      expansions
                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                        expr
                                                                                                                                                                                                        (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| x_1730))))))
                                                                                                                                                                                                        (let ((a…
                                                                                                                                                                                                        expansions
                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                          expr
                                                                                                                                                                                                          (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| x_1730))))))
                                                                                                                                                                                                          (let ((a…
                                                                                                                                                                                                          expansions
                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                            expr
                                                                                                                                                                                                            (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (append_1737 x_1730
                                                                                                                                                                                                                              …
                                                                                                                                                                                                            expansions
                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                              expr
                                                                                                                                                                                                              (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| x_1730))))))
                                                                                                                                                                                                              (let ((a…
                                                                                                                                                                                                              expansions
                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                expr
                                                                                                                                                                                                                (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| y_1731))))))
                                                                                                                                                                                                                (let ((a…
                                                                                                                                                                                                                expansions
                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                  expr
                                                                                                                                                                                                                  (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| x_1730))))))
                                                                                                                                                                                                                  (let ((a…
                                                                                                                                                                                                                  expansions
                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                    expr
                                                                                                                                                                                                                    (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (append_1737 x_1730
                                                                                                                                                                                                                                      …
                                                                                                                                                                                                                    expansions
                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                      expr
                                                                                                                                                                                                                      (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| x_1730))))))
                                                                                                                                                                                                                      (let ((a…
                                                                                                                                                                                                                      expansions
                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                        expr
                                                                                                                                                                                                                        (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| x_1730))))))
                                                                                                                                                                                                                        (let ((a…
                                                                                                                                                                                                                        expansions
                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                          expr
                                                                                                                                                                                                                          (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| y_1731))))))
                                                                                                                                                                                                                          (let ((a…
                                                                                                                                                                                                                          expansions
                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                            expr
                                                                                                                                                                                                                            (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (append_1737 x_1730
                                                                                                                                                                                                                                              …
                                                                                                                                                                                                                            expansions
                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                              expr
                                                                                                                                                                                                                              (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| x_1730))))))
                                                                                                                                                                                                                              (let ((a…
                                                                                                                                                                                                                              expansions
                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                expr
                                                                                                                                                                                                                                (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| x_1730))))))
                                                                                                                                                                                                                                (let ((a…
                                                                                                                                                                                                                                expansions
                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                  expr
                                                                                                                                                                                                                                  (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (append_1737 x_1730
                                                                                                                                                                                                                                                    …
                                                                                                                                                                                                                                  expansions
                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                    expr
                                                                                                                                                                                                                                    (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| y_1731))))))
                                                                                                                                                                                                                                    (let ((a…
                                                                                                                                                                                                                                    expansions
                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                      expr
                                                                                                                                                                                                                                      (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| x_1730))))))
                                                                                                                                                                                                                                      (let ((a…
                                                                                                                                                                                                                                      expansions
                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                        expr
                                                                                                                                                                                                                                        (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| x_1730))))))
                                                                                                                                                                                                                                        (let ((a…
                                                                                                                                                                                                                                        expansions
                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                          expr
                                                                                                                                                                                                                                          (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (append_1737 x_1730
                                                                                                                                                                                                                                                            …
                                                                                                                                                                                                                                          expansions
                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                            expr
                                                                                                                                                                                                                                            (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| x_1730))))))
                                                                                                                                                                                                                                            (let ((a…
                                                                                                                                                                                                                                            expansions
                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                              expr
                                                                                                                                                                                                                                              (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| y_1731))))))
                                                                                                                                                                                                                                              (let ((a…
                                                                                                                                                                                                                                              expansions
                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                expr
                                                                                                                                                                                                                                                (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| x_1730))))))
                                                                                                                                                                                                                                                (let ((a…
                                                                                                                                                                                                                                                expansions
                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                  expr
                                                                                                                                                                                                                                                  (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (append_1737 x_1730
                                                                                                                                                                                                                                                                    …
                                                                                                                                                                                                                                                  expansions
                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                    expr
                                                                                                                                                                                                                                                    (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| x_1730))))))
                                                                                                                                                                                                                                                    (let ((a…
                                                                                                                                                                                                                                                    expansions
                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                      expr
                                                                                                                                                                                                                                                      (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| x_1730))))))
                                                                                                                                                                                                                                                      (let ((a…
                                                                                                                                                                                                                                                      expansions
                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                        expr
                                                                                                                                                                                                                                                        (let ((a!1 (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| (|get.::.1_1729| y_1731))))))
                                                                                                                                                                                                                                                        (let ((a…
                                                                                                                                                                                                                                                        expansions

                                                                                                                                                                                                                                                        Imandra tells us that there are no counterexamples to this conjecture up to our current recursion unrolling bound (100).

                                                                                                                                                                                                                                                        This gives us some confidence that this conjecture is true. Let's now ask Imandra to prove it for all possible cases by induction.

                                                                                                                                                                                                                                                        In [9]:
                                                                                                                                                                                                                                                        verify (fun x y z -> append x (append y z) = append (append x y) z) [@@induct]
                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                        Out[9]:
                                                                                                                                                                                                                                                        - : 'a list -> 'a list -> 'a list -> bool = <fun>
                                                                                                                                                                                                                                                        Goal:
                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                        append x (append y z) = append (append x y) z.
                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                        1 nontautological subgoal.
                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                        Subgoal 1:
                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                        |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                         append x (append y z) = append (append x y) z
                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                        Must try induction.
                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                        The recursive terms in the conjecture suggest 3 inductions.
                                                                                                                                                                                                                                                        Subsumption and merging reduces this to 2.
                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                        Only 1 of those schemes are unflawed.
                                                                                                                                                                                                                                                        We shall induct according to a scheme derived from append.
                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                        Induction scheme:
                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                         (Is_a([], x) ==> φ x y z)
                                                                                                                                                                                                                                                         && (not Is_a([], x) && φ (List.tl x) y z ==> φ x y z).
                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                        2 nontautological subgoals.
                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                        Subgoal 1.2:
                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                         H0. Is_a([], x)
                                                                                                                                                                                                                                                        |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                         append x (append y z) = append (append x y) z
                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                        But simplification reduces this to true, using the definition of append.
                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                        Subgoal 1.1:
                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                         H0. not Is_a([], x)
                                                                                                                                                                                                                                                         H1. append (List.tl x) (append y z) = append (append (List.tl x) y) z
                                                                                                                                                                                                                                                        |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                         append x (append y z) = append (append x y) z
                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                        But simplification reduces this to true, using the definition of append.
                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                         Rules:
                                                                                                                                                                                                                                                            (:def append)
                                                                                                                                                                                                                                                            (:induct append)
                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                        Proved
                                                                                                                                                                                                                                                        proof
                                                                                                                                                                                                                                                        ground_instances0
                                                                                                                                                                                                                                                        definitions5
                                                                                                                                                                                                                                                        inductions1
                                                                                                                                                                                                                                                        search_time
                                                                                                                                                                                                                                                        0.076s
                                                                                                                                                                                                                                                        Expand
                                                                                                                                                                                                                                                        • start[0.076s, "Goal"]
                                                                                                                                                                                                                                                            append ( :var_0: ) (append ( :var_1: ) ( :var_2: )) =
                                                                                                                                                                                                                                                            append (append ( :var_0: ) ( :var_1: )) ( :var_2: )
                                                                                                                                                                                                                                                        • subproof

                                                                                                                                                                                                                                                          append x (append y z) = append (append x y) z
                                                                                                                                                                                                                                                          • start[0.076s, "1"] append x (append y z) = append (append x y) z
                                                                                                                                                                                                                                                          • induction on (functional )
                                                                                                                                                                                                                                                            :scheme (Is_a([], x) ==> φ x y z)
                                                                                                                                                                                                                                                                    && (not Is_a([], x) && φ (List.tl x) y z ==> φ x y z)
                                                                                                                                                                                                                                                          • Split (let (_x_0 : bool) = not Is_a([], x) in
                                                                                                                                                                                                                                                                   let (_x_1 : sko_ty_0 list) = append y z in
                                                                                                                                                                                                                                                                   let (_x_2 : bool) = append x _x_1 = append (append x y) z in
                                                                                                                                                                                                                                                                   let (_x_3 : sko_ty_0 list) = List.tl x in
                                                                                                                                                                                                                                                                   (_x_0 || _x_2)
                                                                                                                                                                                                                                                                   && (not (_x_0 && append _x_3 _x_1 = append (append _x_3 y) z) || _x_2)
                                                                                                                                                                                                                                                                   :cases [not Is_a([], x)
                                                                                                                                                                                                                                                                           || append x (append y z) = append (append x y) z;
                                                                                                                                                                                                                                                                           let (_x_0 : sko_ty_0 list) = List.tl x in
                                                                                                                                                                                                                                                                           let (_x_1 : sko_ty_0 list) = append y z in
                                                                                                                                                                                                                                                                           (Is_a([], x)
                                                                                                                                                                                                                                                                            || not (append _x_0 _x_1 = append (append _x_0 y) z))
                                                                                                                                                                                                                                                                           || append x _x_1 = append (append x y) z])
                                                                                                                                                                                                                                                            • subproof
                                                                                                                                                                                                                                                              let (_x_0 : sko_ty_0 list) = List.tl x in let (_x_1 : sko_ty_0 list) = append y z in (Is_a([], x) || not (append _x_0 _x_1 = append (append _x_0 y) z)) || append x _x_1 = append (append x y) z
                                                                                                                                                                                                                                                              • start[0.030s, "1.1"]
                                                                                                                                                                                                                                                                  let (_x_0 : sko_ty_0 list) = List.tl x in
                                                                                                                                                                                                                                                                  let (_x_1 : sko_ty_0 list) = append y z in
                                                                                                                                                                                                                                                                  (Is_a([], x) || not (append _x_0 _x_1 = append (append _x_0 y) z))
                                                                                                                                                                                                                                                                  || append x _x_1 = append (append x y) z
                                                                                                                                                                                                                                                              • simplify
                                                                                                                                                                                                                                                                into
                                                                                                                                                                                                                                                                true
                                                                                                                                                                                                                                                                expansions
                                                                                                                                                                                                                                                                [append, append, append]
                                                                                                                                                                                                                                                                rewrite_steps
                                                                                                                                                                                                                                                                  forward_chaining
                                                                                                                                                                                                                                                                • subproof
                                                                                                                                                                                                                                                                  not Is_a([], x) || append x (append y z) = append (append x y) z
                                                                                                                                                                                                                                                                  • start[0.030s, "1.2"]
                                                                                                                                                                                                                                                                      not Is_a([], x) || append x (append y z) = append (append x y) z
                                                                                                                                                                                                                                                                  • simplify
                                                                                                                                                                                                                                                                    into
                                                                                                                                                                                                                                                                    true
                                                                                                                                                                                                                                                                    expansions
                                                                                                                                                                                                                                                                    [append, append]
                                                                                                                                                                                                                                                                    rewrite_steps
                                                                                                                                                                                                                                                                      forward_chaining

                                                                                                                                                                                                                                                                Beautiful! So, we see Imandra proved our goal by induction on x, using a structural induction principle derived from the 'a list datatype. We now know the property holds for all possible inputs (of which there are infinitely many!).

                                                                                                                                                                                                                                                                By the way, we can always view Imandra's current session configuration with the #config directive:

                                                                                                                                                                                                                                                                In [10]:
                                                                                                                                                                                                                                                                #config
                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                Out[10]:
                                                                                                                                                                                                                                                                ----------------------------------------------------------------------------
                                                                                                                                                                                                                                                                Imandra session configuration
                                                                                                                                                                                                                                                                ----------------------------------------------------------------------------
                                                                                                                                                                                                                                                                 0. Timeout: 60000 (see: timeout)
                                                                                                                                                                                                                                                                 1. Mode: Logic (see: program,logic)
                                                                                                                                                                                                                                                                 2. Allow redefinition: true (see: redef)
                                                                                                                                                                                                                                                                 3. Load path: [] (see: dir)
                                                                                                                                                                                                                                                                 4. Recursion unroll depth: 100 (see: unroll)
                                                                                                                                                                                                                                                                 5. Random testing: false (see: random_testing)
                                                                                                                                                                                                                                                                 6. SAT seed: 0 (see: sat_seed)
                                                                                                                                                                                                                                                                 7. SMT seed: 0 (see: smt_seed)
                                                                                                                                                                                                                                                                 8. Solver seed: 0 (see: solver_seed)
                                                                                                                                                                                                                                                                 9. Eager goal-based GC: false (see: gc_on_verify)
                                                                                                                                                                                                                                                                10. Undo (implicit push): false (see: undo)
                                                                                                                                                                                                                                                                11. Console tags: waterfall, suggestions (see: console_tags)
                                                                                                                                                                                                                                                                12. Console color: true (see: console_color)
                                                                                                                                                                                                                                                                13. Top results: true (see: top_results)
                                                                                                                                                                                                                                                                14. Interactive hints: true (see: interactive_hints)
                                                                                                                                                                                                                                                                15. Validate definitions: true (see: validate)
                                                                                                                                                                                                                                                                16. Skip proofs: false (see: skip_proofs)
                                                                                                                                                                                                                                                                17. Max induction depth: 3 (see: max_induct)
                                                                                                                                                                                                                                                                18. Induction unroll depth: 8 (see: induct_unroll)
                                                                                                                                                                                                                                                                19. Backchain limit: 100 (see: backchain_limit)
                                                                                                                                                                                                                                                                20. Enable all definitions when unrolling: true (see: unroll_enable_all)
                                                                                                                                                                                                                                                                21. Algebraic number approx. precision: 10 (see: print_approx)
                                                                                                                                                                                                                                                                22. Reflect approximate models: false (see: reflect_approx_models)
                                                                                                                                                                                                                                                                23. Use (produce and consume) CIML certificates: false (see: use_ciml)
                                                                                                                                                                                                                                                                24. Max size for callgraphs: 80 (see: callgraph_size)
                                                                                                                                                                                                                                                                25. Include expansion steps in callgraphs: false (see: callgraph_include_expansions)
                                                                                                                                                                                                                                                                26. Store proofs: false (see: store_proofs)
                                                                                                                                                                                                                                                                ----------------------------------------------------------------------------
                                                                                                                                                                                                                                                                

                                                                                                                                                                                                                                                                Lemmas and Rules

                                                                                                                                                                                                                                                                When we use the verify command, we give it a closed formula (e.g., a lambda term such as (fun x y z -> foo x y z) and ask Imandra to prove that the goal always evaluates to true. Notice that the verify command does not give the verification goal a name.

                                                                                                                                                                                                                                                                Once we've proved a goal, we often want to record it as a theorem. This is both to document our verification progress and to make it possible for our proved goal to be used as a lemma in subsequent verification efforts.

                                                                                                                                                                                                                                                                This can be done by the theorem command.

                                                                                                                                                                                                                                                                For example, we could name our result assoc_append and install it as a theorem as follows:

                                                                                                                                                                                                                                                                theorem assoc_append x y z = append x (append y z) = append (append x y) z) [@@induct]
                                                                                                                                                                                                                                                                

                                                                                                                                                                                                                                                                By default, a theorem is not installed as a rule that will be used automatically in subsequent verification efforts. To install the theorem as a rule, we can use the [@@rewrite] or [@@forward_chaining] attributes.

                                                                                                                                                                                                                                                                Let's focus in this notebook on the use of theorems as rewrite rules.

                                                                                                                                                                                                                                                                Rewrite Rules

                                                                                                                                                                                                                                                                A rewrite rule is a theorem of the form (H1 && ... && Hk ==> LHS = RHS). It instructs Imandra's simplifier to replace terms it matches with the LHS with the suitably instantiated RHS, provided that the corresponding instantiations of the hypotheses H1, ..., Hk can be proved.

                                                                                                                                                                                                                                                                It is also allowed for the conclusion of the rule to be a boolean term, e.g., (H1 && ... && Hk ==> foo) is interpreted with an RHS of true, i.e., (H1 && ... && Hk ==> foo = true).

                                                                                                                                                                                                                                                                Good rewrite rules can have a powerful normalising effect on formulas. We usually want to orient them so that the RHS is a better (i.e., simpler or more canonical) term than the LHS.

                                                                                                                                                                                                                                                                Let us see the use of rewrite rules through a prove about the function reverse.

                                                                                                                                                                                                                                                                Reverse

                                                                                                                                                                                                                                                                Let's define a function to reverse a list. Note how it uses our append function we defined above:

                                                                                                                                                                                                                                                                In [11]:
                                                                                                                                                                                                                                                                let rec reverse x =
                                                                                                                                                                                                                                                                 match x with
                                                                                                                                                                                                                                                                  | [] -> []
                                                                                                                                                                                                                                                                  | x :: xs -> append (reverse xs) [x]
                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                Out[11]:
                                                                                                                                                                                                                                                                val reverse : 'a list -> 'a list = <fun>
                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                termination proof

                                                                                                                                                                                                                                                                Termination proof

                                                                                                                                                                                                                                                                call `reverse (List.tl x)` from `reverse x`
                                                                                                                                                                                                                                                                originalreverse x
                                                                                                                                                                                                                                                                subreverse (List.tl x)
                                                                                                                                                                                                                                                                original ordinalOrdinal.Int (_cnt x)
                                                                                                                                                                                                                                                                sub ordinalOrdinal.Int (_cnt (List.tl x))
                                                                                                                                                                                                                                                                path[not Is_a([], x)]
                                                                                                                                                                                                                                                                proof
                                                                                                                                                                                                                                                                detailed proof
                                                                                                                                                                                                                                                                ground_instances3
                                                                                                                                                                                                                                                                definitions0
                                                                                                                                                                                                                                                                inductions0
                                                                                                                                                                                                                                                                search_time
                                                                                                                                                                                                                                                                0.013s
                                                                                                                                                                                                                                                                details
                                                                                                                                                                                                                                                                Expand
                                                                                                                                                                                                                                                                smt_stats
                                                                                                                                                                                                                                                                num checks7
                                                                                                                                                                                                                                                                arith-make-feasible7
                                                                                                                                                                                                                                                                arith-max-columns10
                                                                                                                                                                                                                                                                rlimit count1551
                                                                                                                                                                                                                                                                arith-cheap-eqs1
                                                                                                                                                                                                                                                                mk clause11
                                                                                                                                                                                                                                                                datatype occurs check12
                                                                                                                                                                                                                                                                mk bool var36
                                                                                                                                                                                                                                                                arith-lower4
                                                                                                                                                                                                                                                                datatype splits1
                                                                                                                                                                                                                                                                decisions4
                                                                                                                                                                                                                                                                propagations6
                                                                                                                                                                                                                                                                arith-max-rows2
                                                                                                                                                                                                                                                                conflicts3
                                                                                                                                                                                                                                                                datatype accessor ax7
                                                                                                                                                                                                                                                                datatype constructor ax5
                                                                                                                                                                                                                                                                num allocs117030781
                                                                                                                                                                                                                                                                final checks4
                                                                                                                                                                                                                                                                added eqs26
                                                                                                                                                                                                                                                                del clause9
                                                                                                                                                                                                                                                                arith eq adapter3
                                                                                                                                                                                                                                                                arith-upper5
                                                                                                                                                                                                                                                                memory17.110000
                                                                                                                                                                                                                                                                max memory17.450000
                                                                                                                                                                                                                                                                Expand
                                                                                                                                                                                                                                                                • start[0.013s]
                                                                                                                                                                                                                                                                    let (_x_0 : int) = count.list (const 0) x in
                                                                                                                                                                                                                                                                    let (_x_1 : ty_0 list) = List.tl x in
                                                                                                                                                                                                                                                                    let (_x_2 : int) = count.list (const 0) _x_1 in
                                                                                                                                                                                                                                                                    not Is_a([], x) && _x_0 >= 0 && _x_2 >= 0
                                                                                                                                                                                                                                                                    ==> Is_a([], _x_1) || Ordinal.( << ) (Ordinal.Int _x_2) (Ordinal.Int _x_0)
                                                                                                                                                                                                                                                                • simplify
                                                                                                                                                                                                                                                                  into
                                                                                                                                                                                                                                                                  let (_x_0 : ty_0 list) = List.tl x in
                                                                                                                                                                                                                                                                  let (_x_1 : int) = count.list (const 0) _x_0 in
                                                                                                                                                                                                                                                                  let (_x_2 : int) = count.list (const 0) x in
                                                                                                                                                                                                                                                                  (Is_a([], _x_0) || Ordinal.( << ) (Ordinal.Int _x_1) (Ordinal.Int _x_2))
                                                                                                                                                                                                                                                                  || not ((not Is_a([], x) && _x_2 >= 0) && _x_1 >= 0)
                                                                                                                                                                                                                                                                  expansions
                                                                                                                                                                                                                                                                  []
                                                                                                                                                                                                                                                                  rewrite_steps
                                                                                                                                                                                                                                                                    forward_chaining
                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                      expr
                                                                                                                                                                                                                                                                      (|`count.list (const 0)[0]`_2041| x_2030)
                                                                                                                                                                                                                                                                      expansions
                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                        expr
                                                                                                                                                                                                                                                                        (|`count.list (const 0)[0]`_2041| (|get.::.1_2020| x_2030))
                                                                                                                                                                                                                                                                        expansions
                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                          expr
                                                                                                                                                                                                                                                                          (|Ordinal.<<_126| (|Ordinal.Int_111|
                                                                                                                                                                                                                                                                                              (|`count.list (const 0)[0]`_2041| (|get.::.…
                                                                                                                                                                                                                                                                          expansions
                                                                                                                                                                                                                                                                          • Unsat

                                                                                                                                                                                                                                                                          Let's compute with reverse to help gain confidence we defined it correctly.

                                                                                                                                                                                                                                                                          In [12]:
                                                                                                                                                                                                                                                                          reverse [1;2;3;4;5]
                                                                                                                                                                                                                                                                          
                                                                                                                                                                                                                                                                          Out[12]:
                                                                                                                                                                                                                                                                          - : int list = [5;4;3;2;1]
                                                                                                                                                                                                                                                                          

                                                                                                                                                                                                                                                                          Let's ask Imandra, are there any lists that are their own reverse?

                                                                                                                                                                                                                                                                          In [13]:
                                                                                                                                                                                                                                                                          instance (fun x -> reverse x = x)
                                                                                                                                                                                                                                                                          
                                                                                                                                                                                                                                                                          Out[13]:
                                                                                                                                                                                                                                                                          - : 'a list -> bool = <fun>
                                                                                                                                                                                                                                                                          module CX : sig type t = C_t_0 val x : 'a list end
                                                                                                                                                                                                                                                                          
                                                                                                                                                                                                                                                                          Instance (after 1 steps, 0.010s):
                                                                                                                                                                                                                                                                           type t = C_t_0
                                                                                                                                                                                                                                                                           let (x : 'a list) = []
                                                                                                                                                                                                                                                                          
                                                                                                                                                                                                                                                                          Instance
                                                                                                                                                                                                                                                                          proof attempt
                                                                                                                                                                                                                                                                          ground_instances1
                                                                                                                                                                                                                                                                          definitions0
                                                                                                                                                                                                                                                                          inductions0
                                                                                                                                                                                                                                                                          search_time
                                                                                                                                                                                                                                                                          0.010s
                                                                                                                                                                                                                                                                          details
                                                                                                                                                                                                                                                                          Expand
                                                                                                                                                                                                                                                                          smt_stats
                                                                                                                                                                                                                                                                          num checks3
                                                                                                                                                                                                                                                                          arith-make-feasible2
                                                                                                                                                                                                                                                                          arith-max-columns4
                                                                                                                                                                                                                                                                          rlimit count417
                                                                                                                                                                                                                                                                          mk clause4
                                                                                                                                                                                                                                                                          datatype occurs check2
                                                                                                                                                                                                                                                                          mk bool var11
                                                                                                                                                                                                                                                                          decisions1
                                                                                                                                                                                                                                                                          propagations2
                                                                                                                                                                                                                                                                          conflicts1
                                                                                                                                                                                                                                                                          datatype accessor ax2
                                                                                                                                                                                                                                                                          datatype constructor ax1
                                                                                                                                                                                                                                                                          num allocs141089273
                                                                                                                                                                                                                                                                          final checks2
                                                                                                                                                                                                                                                                          added eqs8
                                                                                                                                                                                                                                                                          memory17.350000
                                                                                                                                                                                                                                                                          max memory17.450000
                                                                                                                                                                                                                                                                          Expand
                                                                                                                                                                                                                                                                          • start[0.010s] reverse ( :var_0: ) = ( :var_0: )
                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                            expr
                                                                                                                                                                                                                                                                            (reverse_2093 x_2090)
                                                                                                                                                                                                                                                                            expansions
                                                                                                                                                                                                                                                                            • Sat (Some type t = C_t_0 let (x : 'a list) = [] )

                                                                                                                                                                                                                                                                            Ah! Of course, the empty list is its own reverse. What about longer lists, such as those of length 5?

                                                                                                                                                                                                                                                                            Note that here we use the keyword instance, which tries to find values that satisfy the given property, instead of trying to prove the property.

                                                                                                                                                                                                                                                                            In [14]:
                                                                                                                                                                                                                                                                            instance (fun x -> List.length x >= 5 && reverse x = x)
                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                            Out[14]:
                                                                                                                                                                                                                                                                            - : 'a list -> bool = <fun>
                                                                                                                                                                                                                                                                            module CX :
                                                                                                                                                                                                                                                                              sig type t = C_t_0 | C_t_1 | C_t_2 | C_t_3 | C_t_4 val x : t list end
                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                            Instance (after 27 steps, 0.046s):
                                                                                                                                                                                                                                                                             type t = C_t_0 | C_t_1 | C_t_2 | C_t_3 | C_t_4
                                                                                                                                                                                                                                                                             let (x : 'a list) = [C_t_1; C_t_2; C_t_0; C_t_2; C_t_1]
                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                            Instance
                                                                                                                                                                                                                                                                            proof attempt
                                                                                                                                                                                                                                                                            ground_instances27
                                                                                                                                                                                                                                                                            definitions0
                                                                                                                                                                                                                                                                            inductions0
                                                                                                                                                                                                                                                                            search_time
                                                                                                                                                                                                                                                                            0.046s
                                                                                                                                                                                                                                                                            details
                                                                                                                                                                                                                                                                            Expand
                                                                                                                                                                                                                                                                            smt_stats
                                                                                                                                                                                                                                                                            num checks55
                                                                                                                                                                                                                                                                            arith-make-feasible81
                                                                                                                                                                                                                                                                            arith-max-columns23
                                                                                                                                                                                                                                                                            arith-conflicts10
                                                                                                                                                                                                                                                                            rlimit count22865
                                                                                                                                                                                                                                                                            arith-cheap-eqs14
                                                                                                                                                                                                                                                                            mk clause191
                                                                                                                                                                                                                                                                            datatype occurs check569
                                                                                                                                                                                                                                                                            mk bool var1451
                                                                                                                                                                                                                                                                            arith-lower47
                                                                                                                                                                                                                                                                            arith-diseq21
                                                                                                                                                                                                                                                                            datatype splits108
                                                                                                                                                                                                                                                                            decisions633
                                                                                                                                                                                                                                                                            arith-propagations6
                                                                                                                                                                                                                                                                            propagations1042
                                                                                                                                                                                                                                                                            arith-bound-propagations-cheap6
                                                                                                                                                                                                                                                                            arith-max-rows12
                                                                                                                                                                                                                                                                            conflicts71
                                                                                                                                                                                                                                                                            datatype accessor ax188
                                                                                                                                                                                                                                                                            minimized lits9
                                                                                                                                                                                                                                                                            datatype constructor ax429
                                                                                                                                                                                                                                                                            num allocs170680987
                                                                                                                                                                                                                                                                            final checks58
                                                                                                                                                                                                                                                                            added eqs3618
                                                                                                                                                                                                                                                                            del clause117
                                                                                                                                                                                                                                                                            arith eq adapter87
                                                                                                                                                                                                                                                                            arith-upper74
                                                                                                                                                                                                                                                                            memory18.310000
                                                                                                                                                                                                                                                                            max memory20.180000
                                                                                                                                                                                                                                                                            Expand
                                                                                                                                                                                                                                                                            • start[0.046s]
                                                                                                                                                                                                                                                                                List.length ( :var_0: ) >= 5 && reverse ( :var_0: ) = ( :var_0: )
                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                              expr
                                                                                                                                                                                                                                                                              (reverse_2137 x_2130)
                                                                                                                                                                                                                                                                              expansions
                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                expr
                                                                                                                                                                                                                                                                                (|List.length_2133| x_2130)
                                                                                                                                                                                                                                                                                expansions
                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                  expr
                                                                                                                                                                                                                                                                                  (reverse_2137 (|get.::.1_2129| x_2130))
                                                                                                                                                                                                                                                                                  expansions
                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                    expr
                                                                                                                                                                                                                                                                                    (append_2141 (reverse_2137 (|get.::.1_2129| x_2130))
                                                                                                                                                                                                                                                                                                 (|::_3| (|get.::.0_2128| x_2130) |…
                                                                                                                                                                                                                                                                                    expansions
                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                      expr
                                                                                                                                                                                                                                                                                      (|List.length_2133| (|get.::.1_2129| x_2130))
                                                                                                                                                                                                                                                                                      expansions
                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                        expr
                                                                                                                                                                                                                                                                                        (reverse_2137 (|get.::.1_2129| (|get.::.1_2129| x_2130)))
                                                                                                                                                                                                                                                                                        expansions
                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                          expr
                                                                                                                                                                                                                                                                                          (append_2141 (reverse_2137 (|get.::.1_2129| (|get.::.1_2129| x_2130)))
                                                                                                                                                                                                                                                                                                       (|::_3| (|get.::…
                                                                                                                                                                                                                                                                                          expansions
                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                            expr
                                                                                                                                                                                                                                                                                            (|List.length_2133| (|get.::.1_2129| (|get.::.1_2129| x_2130)))
                                                                                                                                                                                                                                                                                            expansions
                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                              expr
                                                                                                                                                                                                                                                                                              (append_2141 (|get.::.1_2129| (reverse_2137 (|get.::.1_2129| x_2130)))
                                                                                                                                                                                                                                                                                                           (|::_3| (|get.::…
                                                                                                                                                                                                                                                                                              expansions
                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                expr
                                                                                                                                                                                                                                                                                                (reverse_2137 (|get.::.1_2129| (|get.::.1_2129| (|get.::.1_2129| x_2130))))
                                                                                                                                                                                                                                                                                                expansions
                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                  expr
                                                                                                                                                                                                                                                                                                  (let ((a!1 (reverse_2137 (|get.::.1_2129| (|get.::.1_2129| (|get.::.1_2129| x_2130)))))
                                                                                                                                                                                                                                                                                                        (a!2 (…
                                                                                                                                                                                                                                                                                                  expansions
                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                    expr
                                                                                                                                                                                                                                                                                                    (|List.length_2133|
                                                                                                                                                                                                                                                                                                      (|get.::.1_2129| (|get.::.1_2129| (|get.::.1_2129| x_2130))))
                                                                                                                                                                                                                                                                                                    expansions
                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                      expr
                                                                                                                                                                                                                                                                                                      (let ((a!1 (|get.::.1_2129| (reverse_2137 (|get.::.1_2129| (|get.::.1_2129| x_2130))))))
                                                                                                                                                                                                                                                                                                        (append_2…
                                                                                                                                                                                                                                                                                                      expansions
                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                        expr
                                                                                                                                                                                                                                                                                                        (let ((a!1 (|get.::.1_2129| (|get.::.1_2129| (reverse_2137 (|get.::.1_2129| x_2130))))))
                                                                                                                                                                                                                                                                                                          (append_2…
                                                                                                                                                                                                                                                                                                        expansions
                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                          expr
                                                                                                                                                                                                                                                                                                          (let ((a!1 (|get.::.1_2129| (|get.::.1_2129| (|get.::.1_2129| (|get.::.1_2129| x_2130))))))
                                                                                                                                                                                                                                                                                                            (rever…
                                                                                                                                                                                                                                                                                                          expansions
                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                            expr
                                                                                                                                                                                                                                                                                                            (let ((a!1 (|get.::.1_2129| (|get.::.1_2129| (|get.::.1_2129| (|get.::.1_2129| x_2130)))))
                                                                                                                                                                                                                                                                                                                  (a!…
                                                                                                                                                                                                                                                                                                            expansions
                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                              expr
                                                                                                                                                                                                                                                                                                              (let ((a!1 (|get.::.1_2129| (|get.::.1_2129| (|get.::.1_2129| (|get.::.1_2129| x_2130))))))
                                                                                                                                                                                                                                                                                                                (|List…
                                                                                                                                                                                                                                                                                                              expansions
                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                expr
                                                                                                                                                                                                                                                                                                                (let ((a!1 (|get.::.1_2129| (|get.::.1_2129| (reverse_2137 (|get.::.1_2129| x_2130))))))
                                                                                                                                                                                                                                                                                                                  (append_2…
                                                                                                                                                                                                                                                                                                                expansions
                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                  expr
                                                                                                                                                                                                                                                                                                                  (let ((a!1 (reverse_2137 (|get.::.1_2129| (|get.::.1_2129| (|get.::.1_2129| x_2130)))))
                                                                                                                                                                                                                                                                                                                        (a!2 (…
                                                                                                                                                                                                                                                                                                                  expansions
                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                    expr
                                                                                                                                                                                                                                                                                                                    (let ((a!1 (|get.::.1_2129| (reverse_2137 (|get.::.1_2129| (|get.::.1_2129| x_2130))))))
                                                                                                                                                                                                                                                                                                                      (append_2…
                                                                                                                                                                                                                                                                                                                    expansions
                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                      expr
                                                                                                                                                                                                                                                                                                                      (let ((a!1 (|get.::.1_2129| (|get.::.1_2129| (|get.::.1_2129| (|get.::.1_2129| x_2130))))))
                                                                                                                                                                                                                                                                                                                        (rever…
                                                                                                                                                                                                                                                                                                                      expansions
                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                        expr
                                                                                                                                                                                                                                                                                                                        (let ((a!1 (|get.::.1_2129| (|get.::.1_2129| (|get.::.1_2129| (|get.::.1_2129| x_2130))))))
                                                                                                                                                                                                                                                                                                                          (appen…
                                                                                                                                                                                                                                                                                                                        expansions
                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                          expr
                                                                                                                                                                                                                                                                                                                          (let ((a!1 (|get.::.1_2129| (|get.::.1_2129| (|get.::.1_2129| (|get.::.1_2129| x_2130))))))
                                                                                                                                                                                                                                                                                                                            (|List…
                                                                                                                                                                                                                                                                                                                          expansions
                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                            expr
                                                                                                                                                                                                                                                                                                                            (let ((a!1 (|get.::.1_2129| (|get.::.1_2129| (|get.::.1_2129| (|get.::.1_2129| x_2130)))))
                                                                                                                                                                                                                                                                                                                                  (a!…
                                                                                                                                                                                                                                                                                                                            expansions
                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                              expr
                                                                                                                                                                                                                                                                                                                              (let ((a!1 (|get.::.1_2129| (|get.::.1_2129| (reverse_2137 (|get.::.1_2129| x_2130))))))
                                                                                                                                                                                                                                                                                                                                (append_2…
                                                                                                                                                                                                                                                                                                                              expansions
                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                expr
                                                                                                                                                                                                                                                                                                                                (let ((a!1 (|get.::.1_2129| (reverse_2137 (|get.::.1_2129| (|get.::.1_2129| x_2130))))))
                                                                                                                                                                                                                                                                                                                                  (append_2…
                                                                                                                                                                                                                                                                                                                                expansions
                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                  expr
                                                                                                                                                                                                                                                                                                                                  (let ((a!1 (reverse_2137 (|get.::.1_2129| (|get.::.1_2129| (|get.::.1_2129| x_2130)))))
                                                                                                                                                                                                                                                                                                                                        (a!2 (…
                                                                                                                                                                                                                                                                                                                                  expansions
                                                                                                                                                                                                                                                                                                                                  • Sat (Some type t = C_t_0 | C_t_1 | C_t_2 | C_t_3 | C_t_4 let (x : 'a list) = [C_t_1; C_t_2; C_t_0; C_t_2; C_t_1] )

                                                                                                                                                                                                                                                                                                                                  Ah! Of course, palindromes! This counterexample is also interesting because, in addition to giving us a concrete value CX.x, this counterexample also involves the synthesis of an algebraic datatype. This is because our goal was polymorphic. If we want, for example, an int list counterexample, we can simply annotate our goal with types:

                                                                                                                                                                                                                                                                                                                                  In [15]:
                                                                                                                                                                                                                                                                                                                                  instance (fun (x : int list) -> List.length x >= 5 && reverse x = x)
                                                                                                                                                                                                                                                                                                                                  
                                                                                                                                                                                                                                                                                                                                  Out[15]:
                                                                                                                                                                                                                                                                                                                                  - : int list -> bool = <fun>
                                                                                                                                                                                                                                                                                                                                  module CX : sig val x : int list end
                                                                                                                                                                                                                                                                                                                                  
                                                                                                                                                                                                                                                                                                                                  Instance (after 27 steps, 0.043s):
                                                                                                                                                                                                                                                                                                                                   let (x : int list) = [6; 9; 11; 9; 6]
                                                                                                                                                                                                                                                                                                                                  
                                                                                                                                                                                                                                                                                                                                  Instance
                                                                                                                                                                                                                                                                                                                                  proof attempt
                                                                                                                                                                                                                                                                                                                                  ground_instances27
                                                                                                                                                                                                                                                                                                                                  definitions0
                                                                                                                                                                                                                                                                                                                                  inductions0
                                                                                                                                                                                                                                                                                                                                  search_time
                                                                                                                                                                                                                                                                                                                                  0.043s
                                                                                                                                                                                                                                                                                                                                  details
                                                                                                                                                                                                                                                                                                                                  Expand
                                                                                                                                                                                                                                                                                                                                  smt_stats
                                                                                                                                                                                                                                                                                                                                  num checks55
                                                                                                                                                                                                                                                                                                                                  arith-make-feasible81
                                                                                                                                                                                                                                                                                                                                  arith-max-columns23
                                                                                                                                                                                                                                                                                                                                  arith-conflicts10
                                                                                                                                                                                                                                                                                                                                  rlimit count22855
                                                                                                                                                                                                                                                                                                                                  arith-cheap-eqs14
                                                                                                                                                                                                                                                                                                                                  mk clause191
                                                                                                                                                                                                                                                                                                                                  datatype occurs check569
                                                                                                                                                                                                                                                                                                                                  mk bool var1451
                                                                                                                                                                                                                                                                                                                                  arith-lower47
                                                                                                                                                                                                                                                                                                                                  arith-diseq21
                                                                                                                                                                                                                                                                                                                                  datatype splits108
                                                                                                                                                                                                                                                                                                                                  decisions633
                                                                                                                                                                                                                                                                                                                                  arith-propagations6
                                                                                                                                                                                                                                                                                                                                  propagations1042
                                                                                                                                                                                                                                                                                                                                  arith-bound-propagations-cheap6
                                                                                                                                                                                                                                                                                                                                  arith-max-rows12
                                                                                                                                                                                                                                                                                                                                  conflicts71
                                                                                                                                                                                                                                                                                                                                  datatype accessor ax188
                                                                                                                                                                                                                                                                                                                                  minimized lits9
                                                                                                                                                                                                                                                                                                                                  datatype constructor ax429
                                                                                                                                                                                                                                                                                                                                  num allocs189399708
                                                                                                                                                                                                                                                                                                                                  final checks58
                                                                                                                                                                                                                                                                                                                                  added eqs3618
                                                                                                                                                                                                                                                                                                                                  del clause117
                                                                                                                                                                                                                                                                                                                                  arith eq adapter87
                                                                                                                                                                                                                                                                                                                                  arith-upper74
                                                                                                                                                                                                                                                                                                                                  memory21.770000
                                                                                                                                                                                                                                                                                                                                  max memory21.770000
                                                                                                                                                                                                                                                                                                                                  Expand
                                                                                                                                                                                                                                                                                                                                  • start[0.043s]
                                                                                                                                                                                                                                                                                                                                      List.length ( :var_0: ) >= 5 && reverse ( :var_0: ) = ( :var_0: )
                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                    expr
                                                                                                                                                                                                                                                                                                                                    (reverse_2241 x_51)
                                                                                                                                                                                                                                                                                                                                    expansions
                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                      expr
                                                                                                                                                                                                                                                                                                                                      (|List.length_2237| x_51)
                                                                                                                                                                                                                                                                                                                                      expansions
                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                        expr
                                                                                                                                                                                                                                                                                                                                        (reverse_2241 (|get.::.1_2236| x_51))
                                                                                                                                                                                                                                                                                                                                        expansions
                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                          expr
                                                                                                                                                                                                                                                                                                                                          (append_2245 (reverse_2241 (|get.::.1_2236| x_51))
                                                                                                                                                                                                                                                                                                                                                       (|::_3| (|get.::.0_2235| x_51) |[]_2…
                                                                                                                                                                                                                                                                                                                                          expansions
                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                            expr
                                                                                                                                                                                                                                                                                                                                            (|List.length_2237| (|get.::.1_2236| x_51))
                                                                                                                                                                                                                                                                                                                                            expansions
                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                              expr
                                                                                                                                                                                                                                                                                                                                              (reverse_2241 (|get.::.1_2236| (|get.::.1_2236| x_51)))
                                                                                                                                                                                                                                                                                                                                              expansions
                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                expr
                                                                                                                                                                                                                                                                                                                                                (append_2245 (reverse_2241 (|get.::.1_2236| (|get.::.1_2236| x_51)))
                                                                                                                                                                                                                                                                                                                                                             (|::_3| (|get.::.0…
                                                                                                                                                                                                                                                                                                                                                expansions
                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                  expr
                                                                                                                                                                                                                                                                                                                                                  (|List.length_2237| (|get.::.1_2236| (|get.::.1_2236| x_51)))
                                                                                                                                                                                                                                                                                                                                                  expansions
                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                    expr
                                                                                                                                                                                                                                                                                                                                                    (append_2245 (|get.::.1_2236| (reverse_2241 (|get.::.1_2236| x_51)))
                                                                                                                                                                                                                                                                                                                                                                 (|::_3| (|get.::.0…
                                                                                                                                                                                                                                                                                                                                                    expansions
                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                      expr
                                                                                                                                                                                                                                                                                                                                                      (reverse_2241 (|get.::.1_2236| (|get.::.1_2236| (|get.::.1_2236| x_51))))
                                                                                                                                                                                                                                                                                                                                                      expansions
                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                        expr
                                                                                                                                                                                                                                                                                                                                                        (let ((a!1 (reverse_2241 (|get.::.1_2236| (|get.::.1_2236| (|get.::.1_2236| x_51)))))
                                                                                                                                                                                                                                                                                                                                                              (a!2 (|:…
                                                                                                                                                                                                                                                                                                                                                        expansions
                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                          expr
                                                                                                                                                                                                                                                                                                                                                          (|List.length_2237| (|get.::.1_2236| (|get.::.1_2236| (|get.::.1_2236| x_51))))
                                                                                                                                                                                                                                                                                                                                                          expansions
                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                            expr
                                                                                                                                                                                                                                                                                                                                                            (let ((a!1 (|get.::.1_2236| (reverse_2241 (|get.::.1_2236| (|get.::.1_2236| x_51))))))
                                                                                                                                                                                                                                                                                                                                                              (append_224…
                                                                                                                                                                                                                                                                                                                                                            expansions
                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                              expr
                                                                                                                                                                                                                                                                                                                                                              (let ((a!1 (|get.::.1_2236| (|get.::.1_2236| (reverse_2241 (|get.::.1_2236| x_51))))))
                                                                                                                                                                                                                                                                                                                                                                (append_224…
                                                                                                                                                                                                                                                                                                                                                              expansions
                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                expr
                                                                                                                                                                                                                                                                                                                                                                (let ((a!1 (|get.::.1_2236| (|get.::.1_2236| (|get.::.1_2236| (|get.::.1_2236| x_51))))))
                                                                                                                                                                                                                                                                                                                                                                  (reverse…
                                                                                                                                                                                                                                                                                                                                                                expansions
                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                  expr
                                                                                                                                                                                                                                                                                                                                                                  (let ((a!1 (|get.::.1_2236| (|get.::.1_2236| (|get.::.1_2236| (|get.::.1_2236| x_51)))))
                                                                                                                                                                                                                                                                                                                                                                        (a!2 …
                                                                                                                                                                                                                                                                                                                                                                  expansions
                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                    expr
                                                                                                                                                                                                                                                                                                                                                                    (let ((a!1 (|get.::.1_2236| (|get.::.1_2236| (|get.::.1_2236| (|get.::.1_2236| x_51))))))
                                                                                                                                                                                                                                                                                                                                                                      (|List.l…
                                                                                                                                                                                                                                                                                                                                                                    expansions
                                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                                      expr
                                                                                                                                                                                                                                                                                                                                                                      (let ((a!1 (|get.::.1_2236| (|get.::.1_2236| (reverse_2241 (|get.::.1_2236| x_51))))))
                                                                                                                                                                                                                                                                                                                                                                        (append_224…
                                                                                                                                                                                                                                                                                                                                                                      expansions
                                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                                        expr
                                                                                                                                                                                                                                                                                                                                                                        (let ((a!1 (reverse_2241 (|get.::.1_2236| (|get.::.1_2236| (|get.::.1_2236| x_51)))))
                                                                                                                                                                                                                                                                                                                                                                              (a!2 (|:…
                                                                                                                                                                                                                                                                                                                                                                        expansions
                                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                                          expr
                                                                                                                                                                                                                                                                                                                                                                          (let ((a!1 (|get.::.1_2236| (reverse_2241 (|get.::.1_2236| (|get.::.1_2236| x_51))))))
                                                                                                                                                                                                                                                                                                                                                                            (append_224…
                                                                                                                                                                                                                                                                                                                                                                          expansions
                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                            expr
                                                                                                                                                                                                                                                                                                                                                                            (let ((a!1 (|get.::.1_2236| (|get.::.1_2236| (|get.::.1_2236| (|get.::.1_2236| x_51))))))
                                                                                                                                                                                                                                                                                                                                                                              (reverse…
                                                                                                                                                                                                                                                                                                                                                                            expansions
                                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                                              expr
                                                                                                                                                                                                                                                                                                                                                                              (let ((a!1 (|get.::.1_2236| (|get.::.1_2236| (|get.::.1_2236| (|get.::.1_2236| x_51))))))
                                                                                                                                                                                                                                                                                                                                                                                (append_…
                                                                                                                                                                                                                                                                                                                                                                              expansions
                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                expr
                                                                                                                                                                                                                                                                                                                                                                                (let ((a!1 (|get.::.1_2236| (|get.::.1_2236| (|get.::.1_2236| (|get.::.1_2236| x_51))))))
                                                                                                                                                                                                                                                                                                                                                                                  (|List.l…
                                                                                                                                                                                                                                                                                                                                                                                expansions
                                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                                  expr
                                                                                                                                                                                                                                                                                                                                                                                  (let ((a!1 (|get.::.1_2236| (|get.::.1_2236| (|get.::.1_2236| (|get.::.1_2236| x_51)))))
                                                                                                                                                                                                                                                                                                                                                                                        (a!2 …
                                                                                                                                                                                                                                                                                                                                                                                  expansions
                                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                                    expr
                                                                                                                                                                                                                                                                                                                                                                                    (let ((a!1 (|get.::.1_2236| (|get.::.1_2236| (reverse_2241 (|get.::.1_2236| x_51))))))
                                                                                                                                                                                                                                                                                                                                                                                      (append_224…
                                                                                                                                                                                                                                                                                                                                                                                    expansions
                                                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                                                      expr
                                                                                                                                                                                                                                                                                                                                                                                      (let ((a!1 (|get.::.1_2236| (reverse_2241 (|get.::.1_2236| (|get.::.1_2236| x_51))))))
                                                                                                                                                                                                                                                                                                                                                                                        (append_224…
                                                                                                                                                                                                                                                                                                                                                                                      expansions
                                                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                                                        expr
                                                                                                                                                                                                                                                                                                                                                                                        (let ((a!1 (reverse_2241 (|get.::.1_2236| (|get.::.1_2236| (|get.::.1_2236| x_51)))))
                                                                                                                                                                                                                                                                                                                                                                                              (a!2 (|:…
                                                                                                                                                                                                                                                                                                                                                                                        expansions
                                                                                                                                                                                                                                                                                                                                                                                        • Sat (Some let (x : int list) = [6; 9; 11; 9; 6] )

                                                                                                                                                                                                                                                                                                                                                                                        Excellent! And we can of course compute with our counterexample:

                                                                                                                                                                                                                                                                                                                                                                                        In [16]:
                                                                                                                                                                                                                                                                                                                                                                                        reverse CX.x
                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                        Out[16]:
                                                                                                                                                                                                                                                                                                                                                                                        - : int list = [6;9;11;9;6]
                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                        In [17]:
                                                                                                                                                                                                                                                                                                                                                                                        reverse CX.x = CX.x
                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                        Out[17]:
                                                                                                                                                                                                                                                                                                                                                                                        - : bool = true
                                                                                                                                                                                                                                                                                                                                                                                        

                                                                                                                                                                                                                                                                                                                                                                                        Reverse of Reverse is the Identity

                                                                                                                                                                                                                                                                                                                                                                                        Now that we've defined our reverse function and experimented a bit with it, let's try to prove an interesting theorem. Let's prove that

                                                                                                                                                                                                                                                                                                                                                                                        (forall x, (reverse (reverse x)) = x).

                                                                                                                                                                                                                                                                                                                                                                                        That is, if we take an arbitrary list x and we reverse it twice, we always get our original x back unscathed.

                                                                                                                                                                                                                                                                                                                                                                                        As usual, let's start by asking Imandra to verify this via bounded checking (a.k.a. recursive unrolling).

                                                                                                                                                                                                                                                                                                                                                                                        In [18]:
                                                                                                                                                                                                                                                                                                                                                                                        verify (fun x -> reverse (reverse x) = x)
                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                        Out[18]:
                                                                                                                                                                                                                                                                                                                                                                                        - : 'a list -> bool = <fun>
                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                        Unknown (Verified up to bound 100)
                                                                                                                                                                                                                                                                                                                                                                                        Expand
                                                                                                                                                                                                                                                                                                                                                                                        expanded
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl (List.tl (reverse x))) in append (List.tl (List.tl (List.tl (List.tl (reverse (List.tl _x_0)))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl (List.tl x)) in append (List.tl (List.tl (List.tl (List.tl (reverse (List.tl _x_0)))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl (List.tl (List.tl (List.tl x)))) in append (List.tl (reverse (List.tl _x_0))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = reverse x in append (List.tl (List.tl (List.tl (reverse (List.tl _x_0))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • reverse (List.tl (List.tl (List.tl (List.tl (List.tl x)))))
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl (List.tl (List.tl x))) in append (List.tl (List.tl (reverse (List.tl _x_0)))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl (List.tl (List.tl (reverse x)))) in append (List.tl (reverse (List.tl _x_0))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x))))))) in append (reverse (List.tl _x_0)) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = reverse x in append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (reverse (List.tl _x_0))))))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl (List.tl x)) in append (List.tl (List.tl (List.tl (List.tl (List.tl (reverse (List.tl _x_0))))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x))))) in append (reverse (List.tl _x_0)) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x)))))) in append (reverse (List.tl _x_0)) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • reverse (List.tl (List.tl (List.tl x)))
                                                                                                                                                                                                                                                                                                                                                                                        • reverse (List.tl (List.tl (List.tl (reverse x))))
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl (reverse x)) in append (List.tl (List.tl (List.tl (List.tl (reverse (List.tl _x_0)))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • reverse (List.tl (List.tl (List.tl (List.tl (List.tl (reverse x))))))
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl x in append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (reverse (List.tl _x_0)))))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (reverse x) in append (List.tl (List.tl (List.tl (List.tl (List.tl (reverse (List.tl _x_0))))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • reverse (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x)))))))
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl (List.tl x)) in append (reverse (List.tl _x_0)) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl (List.tl (List.tl (reverse x)))) in append (List.tl (List.tl (List.tl (reverse (List.tl _x_0))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (reverse x) in append (reverse (List.tl _x_0)) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (reverse (List.tl x))))))))) [List.hd x]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x)))))) in append (List.tl (reverse (List.tl _x_0))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl (reverse x)) in append (List.tl (List.tl (List.tl (reverse (List.tl _x_0))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl (List.tl (reverse x))) in append (List.tl (List.tl (List.tl (reverse (List.tl _x_0))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • append (List.tl (List.tl (List.tl (List.tl (reverse (List.tl x)))))) [List.hd x]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl x) in append (List.tl (List.tl (List.tl (List.tl (List.tl (reverse (List.tl _x_0))))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (reverse x)))))) in append (reverse (List.tl _x_0)) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl x in append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (reverse (List.tl _x_0))))))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl (List.tl (List.tl (List.tl x)))) in append (List.tl (List.tl (reverse (List.tl _x_0)))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl (List.tl (List.tl x))) in append (List.tl (reverse (List.tl _x_0))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl x) in append (List.tl (List.tl (reverse (List.tl _x_0)))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl (reverse x)) in append (List.tl (reverse (List.tl _x_0))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl x in append (reverse (List.tl _x_0)) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • append (List.tl (List.tl (reverse (List.tl x)))) [List.hd x]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = reverse x in append (List.tl (reverse (List.tl _x_0))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • reverse (List.tl (reverse x))
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl x in append (List.tl (List.tl (reverse (List.tl _x_0)))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • append (List.tl (reverse (List.tl x))) [List.hd x]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl (reverse x)) in append (List.tl (List.tl (List.tl (List.tl (List.tl (reverse (List.tl _x_0))))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl (List.tl (List.tl (List.tl (reverse x))))) in append (reverse (List.tl _x_0)) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • append (List.tl (List.tl (List.tl (reverse (List.tl x))))) [List.hd x]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl (List.tl (List.tl (List.tl x)))) in append (List.tl (List.tl (List.tl (reverse (List.tl _x_0))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (reverse (List.tl x)))))))) [List.hd x]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl x) in append (reverse (List.tl _x_0)) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl (List.tl (List.tl x))) in append (List.tl (List.tl (List.tl (List.tl (reverse (List.tl _x_0)))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • reverse (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (reverse x))))))))
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl (List.tl x)) in append (List.tl (List.tl (reverse (List.tl _x_0)))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl x) in append (List.tl (reverse (List.tl _x_0))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • reverse (List.tl x)
                                                                                                                                                                                                                                                                                                                                                                                        • reverse (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x))))))))
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl x) in append (List.tl (List.tl (List.tl (List.tl (reverse (List.tl _x_0)))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x))))) in append (List.tl (List.tl (reverse (List.tl _x_0)))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (reverse x)))))) in append (List.tl (reverse (List.tl _x_0))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • reverse (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (reverse x)))))))
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = reverse x in append (List.tl (List.tl (reverse (List.tl _x_0)))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl (List.tl (List.tl (List.tl (reverse x))))) in append (List.tl (List.tl (reverse (List.tl _x_0)))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl (List.tl x)) in append (List.tl (reverse (List.tl _x_0))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = reverse x in append (List.tl (List.tl (List.tl (List.tl (reverse (List.tl _x_0)))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • reverse (reverse x)
                                                                                                                                                                                                                                                                                                                                                                                        • reverse (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x)))))))))
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (reverse x))))))) in append (reverse (List.tl _x_0)) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • reverse (List.tl (List.tl (List.tl (List.tl (reverse x)))))
                                                                                                                                                                                                                                                                                                                                                                                        • reverse (List.tl (List.tl x))
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl x in append (List.tl (List.tl (List.tl (List.tl (reverse (List.tl _x_0)))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • reverse (List.tl (List.tl (List.tl (List.tl x))))
                                                                                                                                                                                                                                                                                                                                                                                        • reverse (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (reverse x)))))))))
                                                                                                                                                                                                                                                                                                                                                                                        • append (List.tl (List.tl (List.tl (List.tl (List.tl (reverse (List.tl x))))))) [List.hd x]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl (List.tl (List.tl (reverse x)))) in append (reverse (List.tl _x_0)) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl (List.tl x)) in append (List.tl (List.tl (List.tl (reverse (List.tl _x_0))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • append (reverse (List.tl x)) [List.hd x]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl x in append (List.tl (List.tl (List.tl (reverse (List.tl _x_0))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl x) in append (List.tl (List.tl (List.tl (reverse (List.tl _x_0))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = reverse x in append (reverse (List.tl _x_0)) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (reverse x) in append (List.tl (List.tl (List.tl (List.tl (reverse (List.tl _x_0)))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl (List.tl (List.tl (List.tl x)))) in append (reverse (List.tl _x_0)) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl (List.tl (List.tl (List.tl (reverse x))))) in append (List.tl (reverse (List.tl _x_0))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (reverse (List.tl x)))))))))) [List.hd x]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl (List.tl (reverse x))) in append (List.tl (List.tl (reverse (List.tl _x_0)))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl x in append (List.tl (reverse (List.tl _x_0))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl (List.tl (List.tl x))) in append (List.tl (List.tl (List.tl (reverse (List.tl _x_0))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = reverse x in append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (reverse (List.tl _x_0)))))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl (reverse x)) in append (reverse (List.tl _x_0)) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (reverse x) in append (List.tl (List.tl (reverse (List.tl _x_0)))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • reverse x
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl (reverse x)) in append (List.tl (List.tl (reverse (List.tl _x_0)))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (reverse x) in append (List.tl (reverse (List.tl _x_0))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl x) in append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (reverse (List.tl _x_0)))))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl x in append (List.tl (List.tl (List.tl (List.tl (List.tl (reverse (List.tl _x_0))))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl (List.tl (List.tl x))) in append (reverse (List.tl _x_0)) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x))))) in append (List.tl (reverse (List.tl _x_0))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (reverse x) in append (List.tl (List.tl (List.tl (reverse (List.tl _x_0))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (reverse x) in append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (reverse (List.tl _x_0)))))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = reverse x in append (List.tl (List.tl (List.tl (List.tl (List.tl (reverse (List.tl _x_0))))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl (List.tl (reverse x))) in append (reverse (List.tl _x_0)) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • reverse (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x))))))
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl (List.tl (List.tl (reverse x)))) in append (List.tl (List.tl (reverse (List.tl _x_0)))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl (List.tl (reverse x))) in append (List.tl (reverse (List.tl _x_0))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • reverse (List.tl (List.tl (reverse x)))
                                                                                                                                                                                                                                                                                                                                                                                        blocked
                                                                                                                                                                                                                                                                                                                                                                                        • reverse (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (reverse x))))))))))
                                                                                                                                                                                                                                                                                                                                                                                        • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (reverse (List.tl x))))))))))) [List.hd x]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl x) in append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (reverse (List.tl _x_0))))))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl (List.tl (List.tl (List.tl x)))) in append (List.tl (List.tl (List.tl (List.tl (reverse (List.tl _x_0)))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x)))))))) in append (reverse (List.tl _x_0)) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x))))))) in append (List.tl (reverse (List.tl _x_0))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • reverse (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x))))))))))
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl (List.tl (List.tl (List.tl (reverse x))))) in append (List.tl (List.tl (List.tl (reverse (List.tl _x_0))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = reverse x in append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (reverse (List.tl _x_0)))))))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (reverse x))))))) in append (List.tl (reverse (List.tl _x_0))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl (List.tl (List.tl (reverse x)))) in append (List.tl (List.tl (List.tl (List.tl (reverse (List.tl _x_0)))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl (List.tl (List.tl x))) in append (List.tl (List.tl (List.tl (List.tl (List.tl (reverse (List.tl _x_0))))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (reverse x)))))))) in append (reverse (List.tl _x_0)) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x))))) in append (List.tl (List.tl (List.tl (reverse (List.tl _x_0))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl (reverse x)) in append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (reverse (List.tl _x_0)))))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (reverse x) in append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (reverse (List.tl _x_0))))))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl (List.tl x)) in append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (reverse (List.tl _x_0)))))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl (List.tl (reverse x))) in append (List.tl (List.tl (List.tl (List.tl (List.tl (reverse (List.tl _x_0))))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (reverse x)))))) in append (List.tl (List.tl (reverse (List.tl _x_0)))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x)))))) in append (List.tl (List.tl (reverse (List.tl _x_0)))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : sko_ty_0 list) = List.tl x in append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (reverse (List.tl _x_0)))))))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                        proof attempt
                                                                                                                                                                                                                                                                                                                                                                                        ground_instances100
                                                                                                                                                                                                                                                                                                                                                                                        definitions0
                                                                                                                                                                                                                                                                                                                                                                                        inductions0
                                                                                                                                                                                                                                                                                                                                                                                        search_time
                                                                                                                                                                                                                                                                                                                                                                                        0.297s
                                                                                                                                                                                                                                                                                                                                                                                        Expand
                                                                                                                                                                                                                                                                                                                                                                                        • start[0.297s] reverse (reverse ( :var_0: )) = ( :var_0: )
                                                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                                                          expr
                                                                                                                                                                                                                                                                                                                                                                                          (reverse_1977 x_1974)
                                                                                                                                                                                                                                                                                                                                                                                          expansions
                                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                                            expr
                                                                                                                                                                                                                                                                                                                                                                                            (reverse_1977 (reverse_1977 x_1974))
                                                                                                                                                                                                                                                                                                                                                                                            expansions
                                                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                                                              expr
                                                                                                                                                                                                                                                                                                                                                                                              (reverse_1977 (|get.::.1_1973| x_1974))
                                                                                                                                                                                                                                                                                                                                                                                              expansions
                                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                                expr
                                                                                                                                                                                                                                                                                                                                                                                                (append_1981 (reverse_1977 (|get.::.1_1973| x_1974))
                                                                                                                                                                                                                                                                                                                                                                                                             (|::_3| (|get.::.0_1972| x_1974) |…
                                                                                                                                                                                                                                                                                                                                                                                                expansions
                                                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                                                  expr
                                                                                                                                                                                                                                                                                                                                                                                                  (reverse_1977 (|get.::.1_1973| (reverse_1977 x_1974)))
                                                                                                                                                                                                                                                                                                                                                                                                  expansions
                                                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                                                    expr
                                                                                                                                                                                                                                                                                                                                                                                                    (append_1981 (reverse_1977 (|get.::.1_1973| (reverse_1977 x_1974)))
                                                                                                                                                                                                                                                                                                                                                                                                                 (|::_3| (|get.::.0_…
                                                                                                                                                                                                                                                                                                                                                                                                    expansions
                                                                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                                                                      expr
                                                                                                                                                                                                                                                                                                                                                                                                      (reverse_1977 (|get.::.1_1973| (|get.::.1_1973| x_1974)))
                                                                                                                                                                                                                                                                                                                                                                                                      expansions
                                                                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                                                                        expr
                                                                                                                                                                                                                                                                                                                                                                                                        (append_1981 (reverse_1977 (|get.::.1_1973| (|get.::.1_1973| x_1974)))
                                                                                                                                                                                                                                                                                                                                                                                                                     (|::_3| (|get.::…
                                                                                                                                                                                                                                                                                                                                                                                                        expansions
                                                                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                                                                          expr
                                                                                                                                                                                                                                                                                                                                                                                                          (append_1981 (|get.::.1_1973| (reverse_1977 (|get.::.1_1973| x_1974)))
                                                                                                                                                                                                                                                                                                                                                                                                                       (|::_3| (|get.::…
                                                                                                                                                                                                                                                                                                                                                                                                          expansions
                                                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                                                            expr
                                                                                                                                                                                                                                                                                                                                                                                                            (reverse_1977 (|get.::.1_1973| (|get.::.1_1973| (reverse_1977 x_1974))))
                                                                                                                                                                                                                                                                                                                                                                                                            expansions
                                                                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                                                                              expr
                                                                                                                                                                                                                                                                                                                                                                                                              (let ((a!1 (reverse_1977 (|get.::.1_1973| (|get.::.1_1973| (reverse_1977 x_1974)))))
                                                                                                                                                                                                                                                                                                                                                                                                                    (a!2 (|::…
                                                                                                                                                                                                                                                                                                                                                                                                              expansions
                                                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                expr
                                                                                                                                                                                                                                                                                                                                                                                                                (let ((a!1 (|get.::.1_1973| (reverse_1977 (|get.::.1_1973| (reverse_1977 x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                  (append_1981…
                                                                                                                                                                                                                                                                                                                                                                                                                expansions
                                                                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                  expr
                                                                                                                                                                                                                                                                                                                                                                                                                  (reverse_1977 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| x_1974))))
                                                                                                                                                                                                                                                                                                                                                                                                                  expansions
                                                                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                    expr
                                                                                                                                                                                                                                                                                                                                                                                                                    (let ((a!1 (reverse_1977 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| x_1974)))))
                                                                                                                                                                                                                                                                                                                                                                                                                          (a!2 (…
                                                                                                                                                                                                                                                                                                                                                                                                                    expansions
                                                                                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                      expr
                                                                                                                                                                                                                                                                                                                                                                                                                      (let ((a!1 (|get.::.1_1973| (reverse_1977 (|get.::.1_1973| (|get.::.1_1973| x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                        (append_1…
                                                                                                                                                                                                                                                                                                                                                                                                                      expansions
                                                                                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                        expr
                                                                                                                                                                                                                                                                                                                                                                                                                        (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (reverse_1977 (|get.::.1_1973| x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                          (append_1…
                                                                                                                                                                                                                                                                                                                                                                                                                        expansions
                                                                                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                          expr
                                                                                                                                                                                                                                                                                                                                                                                                                          (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| (reverse_1977 x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                            (reverse_…
                                                                                                                                                                                                                                                                                                                                                                                                                          expansions
                                                                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                            expr
                                                                                                                                                                                                                                                                                                                                                                                                                            (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| (reverse_1977 x_1974)))))
                                                                                                                                                                                                                                                                                                                                                                                                                                  (a!2 (…
                                                                                                                                                                                                                                                                                                                                                                                                                            expansions
                                                                                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                              expr
                                                                                                                                                                                                                                                                                                                                                                                                                              (let ((a!1 (reverse_1977 (|get.::.1_1973| (|get.::.1_1973| (reverse_1977 x_1974)))))
                                                                                                                                                                                                                                                                                                                                                                                                                                    (a!2 (|::…
                                                                                                                                                                                                                                                                                                                                                                                                                              expansions
                                                                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                expr
                                                                                                                                                                                                                                                                                                                                                                                                                                (let ((a!1 (|get.::.1_1973| (reverse_1977 (|get.::.1_1973| (reverse_1977 x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                  (append_1981…
                                                                                                                                                                                                                                                                                                                                                                                                                                expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                  expr
                                                                                                                                                                                                                                                                                                                                                                                                                                  (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                    (rever…
                                                                                                                                                                                                                                                                                                                                                                                                                                  expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                    expr
                                                                                                                                                                                                                                                                                                                                                                                                                                    (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| x_1974)))))
                                                                                                                                                                                                                                                                                                                                                                                                                                          (a!…
                                                                                                                                                                                                                                                                                                                                                                                                                                    expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                      expr
                                                                                                                                                                                                                                                                                                                                                                                                                                      (let ((a!1 (reverse_1977 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| x_1974)))))
                                                                                                                                                                                                                                                                                                                                                                                                                                            (a!2 (…
                                                                                                                                                                                                                                                                                                                                                                                                                                      expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                        expr
                                                                                                                                                                                                                                                                                                                                                                                                                                        (let ((a!1 (|get.::.1_1973| (reverse_1977 (|get.::.1_1973| (|get.::.1_1973| x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                          (append_1…
                                                                                                                                                                                                                                                                                                                                                                                                                                        expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                          expr
                                                                                                                                                                                                                                                                                                                                                                                                                                          (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (reverse_1977 (|get.::.1_1973| x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                            (append_1…
                                                                                                                                                                                                                                                                                                                                                                                                                                          expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                            expr
                                                                                                                                                                                                                                                                                                                                                                                                                                            (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| (reverse_1977 x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                              (reverse_…
                                                                                                                                                                                                                                                                                                                                                                                                                                            expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                              expr
                                                                                                                                                                                                                                                                                                                                                                                                                                              (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| (reverse_1977 x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                (append_1…
                                                                                                                                                                                                                                                                                                                                                                                                                                              expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| (reverse_1977 x_1974)))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                      (a!2 (…
                                                                                                                                                                                                                                                                                                                                                                                                                                                expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                  expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                  (let ((a!1 (reverse_1977 (|get.::.1_1973| (|get.::.1_1973| (reverse_1977 x_1974)))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                        (a!2 (|::…
                                                                                                                                                                                                                                                                                                                                                                                                                                                  expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                    expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                    (let ((a!1 (|get.::.1_1973| (reverse_1977 (|get.::.1_1973| (reverse_1977 x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                      (append_1981…
                                                                                                                                                                                                                                                                                                                                                                                                                                                    expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                      expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                      (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                        (rever…
                                                                                                                                                                                                                                                                                                                                                                                                                                                      expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                        expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                        (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                          (appen…
                                                                                                                                                                                                                                                                                                                                                                                                                                                        expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                          expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                          (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| x_1974)))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                (a!…
                                                                                                                                                                                                                                                                                                                                                                                                                                                          expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                            expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                            (let ((a!1 (reverse_1977 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| x_1974)))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (a!2 (…
                                                                                                                                                                                                                                                                                                                                                                                                                                                            expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                              expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                              (let ((a!1 (|get.::.1_1973| (reverse_1977 (|get.::.1_1973| (|get.::.1_1973| x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                (append_1…
                                                                                                                                                                                                                                                                                                                                                                                                                                                              expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (reverse_1977 (|get.::.1_1973| x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (append_1…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| (reverse_1977 x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (reverse_…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| (reverse_1977 x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (append_1…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| (reverse_1977 x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (append_1…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| (reverse_1977 x_1974)))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (a!2 (…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (let ((a!1 (reverse_1977 (|get.::.1_1973| (|get.::.1_1973| (reverse_1977 x_1974)))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (a!2 (|::…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (let ((a!1 (|get.::.1_1973| (reverse_1977 (|get.::.1_1973| (reverse_1977 x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (append_1981…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (rever…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (appen…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (appen…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| x_1974)))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (a!…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (let ((a!1 (reverse_1977 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| x_1974)))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (a!2 (…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (let ((a!1 (|get.::.1_1973| (reverse_1977 (|get.::.1_1973| (|get.::.1_1973| x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (append_1…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (reverse_1977 (|get.::.1_1973| x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (append_1…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| (reverse_1977 x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (reverse_…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| (reverse_1977 x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (let ((a!2 …
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| (reverse_1977 x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (let ((a!2 …
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| (reverse_1977 x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (let ((a!2 …
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| (reverse_1977 x_1974)))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (a!3 (…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (let ((a!1 (reverse_1977 (|get.::.1_1973| (|get.::.1_1973| (reverse_1977 x_1974)))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (a!3 (|::…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (let ((a!1 (|get.::.1_1973| (reverse_1977 (|get.::.1_1973| (reverse_1977 x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (let ((a!2 (|g…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (rever…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (let ((a…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (let ((a…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (let ((a…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| x_1974)))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (a!…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (let ((a!1 (reverse_1977 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| x_1974)))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (a!3 (…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (let ((a!1 (|get.::.1_1973| (reverse_1977 (|get.::.1_1973| (|get.::.1_1973| x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (let ((a!2 …
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (reverse_1977 (|get.::.1_1973| x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (let ((a!2 …
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| (reverse_1977 x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (let ((a!2 …
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| (reverse_1977 x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (let ((a!2 …
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| (reverse_1977 x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (let ((a!2 …
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| (reverse_1977 x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (let ((a!2 …
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| (reverse_1977 x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (let ((a!2 …
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| (reverse_1977 x_1974)))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (a!3 (…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (let ((a!1 (reverse_1977 (|get.::.1_1973| (|get.::.1_1973| (reverse_1977 x_1974)))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (a!3 (|::…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (let ((a!1 (|get.::.1_1973| (reverse_1977 (|get.::.1_1973| (reverse_1977 x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (let ((a!2 (|g…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (let ((a…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (let ((a…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (let ((a…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (let ((a…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (let ((a…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| x_1974)))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (a!…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (let ((a!1 (reverse_1977 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| x_1974)))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (a!3 (…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (let ((a!1 (|get.::.1_1973| (reverse_1977 (|get.::.1_1973| (|get.::.1_1973| x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (let ((a!2 …
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (reverse_1977 (|get.::.1_1973| x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (let ((a!2 …
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| (reverse_1977 x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (let ((a!2 …
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| (reverse_1977 x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (let ((a!2 …
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| (reverse_1977 x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (let ((a!2 …
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| (reverse_1977 x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (let ((a!2 …
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| (reverse_1977 x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (let ((a!2 …
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| (reverse_1977 x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (let ((a!2 …
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| (reverse_1977 x_1974)))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (a!3 (…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (let ((a!1 (reverse_1977 (|get.::.1_1973| (|get.::.1_1973| (reverse_1977 x_1974)))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (a!3 (|::…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (let ((a!1 (|get.::.1_1973| (reverse_1977 (|get.::.1_1973| (reverse_1977 x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (let ((a!2 (|g…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (let ((a…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (let ((a…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (let ((a…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (let ((a…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (let ((a…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (let ((a…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| x_1974)))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (a!…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (let ((a!1 (reverse_1977 (|get.::.1_1973| (|get.::.1_1973| (|get.::.1_1973| x_1974)))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (a!3 (…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (let ((a!1 (|get.::.1_1973| (reverse_1977 (|get.::.1_1973| (|get.::.1_1973| x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (let ((a!2 …
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (let ((a!1 (|get.::.1_1973| (|get.::.1_1973| (reverse_1977 (|get.::.1_1973| x_1974))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (let ((a!2 …
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expansions

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Imandra tells us that there are no counterexamples up to our current unrolling bound (100).

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                So, our conjecture seems like a good candidate for proof by induction.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                In [19]:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                verify (fun x -> reverse (reverse x) = x) [@@induct]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Out[19]:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                - : 'a list -> bool = <fun>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Goal:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                reverse (reverse x) = x.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1 nontautological subgoal.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Subgoal 1:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 reverse (reverse x) = x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Must try induction.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                We shall induct according to a scheme derived from reverse.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Induction scheme:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (Is_a([], x) ==> φ x) && (not Is_a([], x) && φ (List.tl x) ==> φ x).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                2 nontautological subgoals.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Subgoal 1.2:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 H0. Is_a([], x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 reverse (reverse x) = x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                But simplification reduces this to true, using the definition of reverse.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Subgoal 1.1:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 H0. not Is_a([], x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 H1. reverse (reverse (List.tl x)) = List.tl x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 reverse (reverse x) = x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This simplifies, using the definition of reverse to:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Subgoal 1.1':
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 H0. reverse (reverse (List.tl x)) = List.tl x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 C0. Is_a([], x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 C1. reverse (append (reverse (List.tl x)) [List.hd x]) = x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                We can eliminate destructors by the following substitution:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 x -> x1 :: x2
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This produces the modified subgoal:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Subgoal 1.1'':
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 H0. reverse (reverse x2) = x2
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 reverse (append (reverse x2) [x1]) = x1 :: x2
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Cross-fertilizing with:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 reverse (reverse x2) = x2
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This produces the modified subgoal:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Subgoal 1.1''':
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 reverse (append (reverse x2) [x1]) = x1 :: (reverse (reverse x2))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Candidates for generalization:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 reverse x2
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This produces the modified subgoal:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Subgoal 1.1'''':
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 reverse (append gen_1 [x1]) = x1 :: (reverse gen_1)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Must try induction.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The recursive terms in the conjecture suggest 2 inductions.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Subsumption and merging reduces this to 1.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                We shall induct according to a scheme derived from append.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Induction scheme:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (Is_a([], gen_1) ==> φ gen_1 x1)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 && (not Is_a([], gen_1) && φ (List.tl gen_1) x1 ==> φ gen_1 x1).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                2 nontautological subgoals.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Subgoal 1.1''''.2:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 H0. Is_a([], gen_1)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 reverse (append gen_1 [x1]) = x1 :: (reverse gen_1)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                But simplification reduces this to true, using the definitions of append and
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                reverse.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Subgoal 1.1''''.1:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 H0. not Is_a([], gen_1)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 H1. reverse (append (List.tl gen_1) [x1]) = x1 :: (reverse (List.tl gen_1))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 reverse (append gen_1 [x1]) = x1 :: (reverse gen_1)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This simplifies, using the definitions of append and reverse to:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Subgoal 1.1''''.1':
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 H0. reverse (append (List.tl gen_1) [x1]) = x1 :: (reverse (List.tl gen_1))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 C0. Is_a([], gen_1)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 C1. append (reverse (append (List.tl gen_1) [x1])) [List.hd gen_1] =
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     x1 :: (append (reverse (List.tl gen_1)) [List.hd gen_1])
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                But we verify Subgoal 1.1''''.1' by recursive unrolling.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Rules:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (:def append)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (:def reverse)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (:induct append)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (:induct reverse)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Proved
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                proof
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ground_instances5
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                definitions11
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                inductions2
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                search_time
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                0.797s
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                details
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Expand
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                smt_stats
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                num checks11
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                arith-make-feasible9
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                arith-max-columns4
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                rlimit count91168
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                mk clause105
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                datatype occurs check118
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                mk bool var241
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                datatype splits25
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                decisions71
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                propagations102
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                conflicts14
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                datatype accessor ax26
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                datatype constructor ax46
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                num allocs1760651436
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                final checks14
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                added eqs310
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                del clause75
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                memory52.610000
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                max memory52.610000
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Expand
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • start[0.797s, "Goal"] reverse (reverse ( :var_0: )) = ( :var_0: )
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • subproof

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  reverse (reverse x) = x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • start[0.797s, "1"] reverse (reverse x) = x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • induction on (functional )
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    :scheme (Is_a([], x) ==> φ x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            && (not Is_a([], x) && φ (List.tl x) ==> φ x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Split (let (_x_0 : bool) = not Is_a([], x) in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           let (_x_1 : bool) = reverse (reverse x) = x in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           let (_x_2 : sko_ty_0 list) = List.tl x in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           (_x_0 || _x_1)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           && (not (_x_0 && reverse (reverse _x_2) = _x_2) || _x_1)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           :cases [not Is_a([], x) || reverse (reverse x) = x;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   let (_x_0 : sko_ty_0 list) = List.tl x in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   (Is_a([], x) || not (reverse (reverse _x_0) = _x_0))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   || reverse (reverse x) = x])
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • subproof
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      let (_x_0 : sko_ty_0 list) = List.tl x in (Is_a([], x) || not (reverse (reverse _x_0) = _x_0)) || reverse (reverse x) = x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • start[0.704s, "1.1"]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          let (_x_0 : sko_ty_0 list) = List.tl x in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (Is_a([], x) || not (reverse (reverse _x_0) = _x_0))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          || reverse (reverse x) = x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • simplify
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        into
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        let (_x_0 : sko_ty_0 list) = List.tl x in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        let (_x_1 : sko_ty_0 list) = reverse _x_0 in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (Is_a([], x) || not (reverse _x_1 = _x_0))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        || reverse (append _x_1 [List.hd x]) = x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        reverse
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        rewrite_steps
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          forward_chaining
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Elim_destructor (:cstor ( :: ) :replace x1 :: x2 :context [])
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Generalize (let (_x_0 : sko_ty_0 list) = reverse x2 in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        reverse (append _x_0 [x1]) = x1 :: (reverse _x_0)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        :as (gen_1 : sko_ty_0 list))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • induction on (functional )
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            :scheme (Is_a([], gen_1) ==> φ gen_1 x1)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    && (not Is_a([], gen_1) && φ (List.tl gen_1) x1 ==> φ gen_1 x1)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Split (let (_x_0 : bool) = not Is_a([], gen_1) in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   let (_x_1 : sko_ty_0 list) = [x1] in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   let (_x_2 : bool)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       = reverse (append gen_1 _x_1) = x1 :: (reverse gen_1)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   let (_x_3 : sko_ty_0 list) = List.tl gen_1 in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   (_x_0 || _x_2)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   && (not (_x_0 && reverse (append _x_3 _x_1) = x1 :: (reverse _x_3))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       || _x_2)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   :cases [not Is_a([], gen_1)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           || reverse (append gen_1 [x1]) = x1 :: (reverse gen_1);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           let (_x_0 : sko_ty_0 list) = List.tl gen_1 in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           let (_x_1 : sko_ty_0 list) = [x1] in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           (Is_a([], gen_1)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            || not (reverse (append _x_0 _x_1) = x1 :: (reverse _x_0)))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           || reverse (append gen_1 _x_1) = x1 :: (reverse gen_1)])
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Subproof
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Subproof
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • subproof
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          not Is_a([], x) || reverse (reverse x) = x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • start[0.704s, "1.2"] not Is_a([], x) || reverse (reverse x) = x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • simplify
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            into
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            [reverse, reverse]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            rewrite_steps
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              forward_chaining

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Success!

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Imandra proves this fact automatically, and its inductive proof actually involves a nested subinduction.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Imandra has powerful techniques for automating complex inductions, involving simplification, destructor elimination, generalisation and more. But it's often the case that nested inductions actually suggest lemmas that could be of general use.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        To illustrate this, let's take a look at one of the interesting subgoals in our proof:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        reverse (append gen_1 (x1 :: [])) = x1 :: (reverse gen_1)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        This looks like a very nice fact. Instead of Imandra having to derive this fact as a subinduction, let's prove it as a theorem itself and install it as a rewrite rule. Then we will be able to apply it later and shorten our subsequent proofs.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        In [20]:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        theorem rev_app_single x y = reverse (append x [y]) = y :: (reverse x) [@@induct] [@@rewrite]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Out[20]:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        val rev_app_single : 'a list -> 'a -> bool = <fun>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Goal:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        reverse (append x [y]) = y :: (reverse x).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1 nontautological subgoal.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Subgoal 1:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         reverse (append x [y]) = y :: (reverse x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Must try induction.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        The recursive terms in the conjecture suggest 2 inductions.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Subsumption and merging reduces this to 1.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        We shall induct according to a scheme derived from append.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Induction scheme:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         (Is_a([], x) ==> φ x y) && (not Is_a([], x) && φ (List.tl x) y ==> φ x y).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        2 nontautological subgoals.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Subgoal 1.2:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         H0. Is_a([], x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         reverse (append x [y]) = y :: (reverse x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        But simplification reduces this to true, using the definitions of append and
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        reverse.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Subgoal 1.1:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         H0. not Is_a([], x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         H1. reverse (append (List.tl x) [y]) = y :: (reverse (List.tl x))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         reverse (append x [y]) = y :: (reverse x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        This simplifies, using the definitions of append and reverse to:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Subgoal 1.1':
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         H0. reverse (append (List.tl x) [y]) = y :: (reverse (List.tl x))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         C0. Is_a([], x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         C1. append (reverse (append (List.tl x) [y])) [List.hd x] =
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             y :: (append (reverse (List.tl x)) [List.hd x])
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        But we verify Subgoal 1.1' by recursive unrolling.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         Rules:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (:def append)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (:def reverse)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (:induct append)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Proved
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        proof
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        ground_instances2
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        definitions8
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        inductions1
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        search_time
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        0.166s
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        details
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Expand
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        smt_stats
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        num checks5
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        arith-make-feasible3
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        arith-max-columns4
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        rlimit count25859
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        mk clause22
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        datatype occurs check21
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        mk bool var61
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        datatype splits5
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        decisions12
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        propagations14
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        conflicts3
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        datatype accessor ax7
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        datatype constructor ax7
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        num allocs2655605368
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        final checks4
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        added eqs61
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        del clause15
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        memory50.310000
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        max memory52.610000
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Expand
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • start[0.166s, "Goal"]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            reverse (append ( :var_0: ) [( :var_1: )]) =
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ( :var_1: ) :: (reverse ( :var_0: ))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • subproof

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          reverse (append x [y]) = y :: (reverse x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • start[0.166s, "1"] reverse (append x [y]) = y :: (reverse x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • induction on (functional )
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            :scheme (Is_a([], x) ==> φ x y)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    && (not Is_a([], x) && φ (List.tl x) y ==> φ x y)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Split (let (_x_0 : bool) = not Is_a([], x) in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   let (_x_1 : sko_ty_0 list) = [y] in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   let (_x_2 : bool) = reverse (append x _x_1) = y :: (reverse x) in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   let (_x_3 : sko_ty_0 list) = List.tl x in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   (_x_0 || _x_2)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   && (not (_x_0 && reverse (append _x_3 _x_1) = y :: (reverse _x_3))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       || _x_2)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   :cases [not Is_a([], x) || reverse (append x [y]) = y :: (reverse x);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           let (_x_0 : sko_ty_0 list) = List.tl x in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           let (_x_1 : sko_ty_0 list) = [y] in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           (Is_a([], x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            || not (reverse (append _x_0 _x_1) = y :: (reverse _x_0)))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           || reverse (append x _x_1) = y :: (reverse x)])
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • subproof
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              let (_x_0 : sko_ty_0 list) = List.tl x in let (_x_1 : sko_ty_0 list) = [y] in (Is_a([], x) || not (reverse (append _x_0 _x_1) = y :: (reverse _x_0))) || reverse (append x _x_1) = y :: (reverse x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • start[0.129s, "1.1"]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  let (_x_0 : sko_ty_0 list) = List.tl x in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  let (_x_1 : sko_ty_0 list) = [y] in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (Is_a([], x) || not (reverse (append _x_0 _x_1) = y :: (reverse _x_0)))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  || reverse (append x _x_1) = y :: (reverse x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • simplify
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                into
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                let (_x_0 : sko_ty_0 list) = List.tl x in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                let (_x_1 : sko_ty_0 list) = reverse (append _x_0 [y]) in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                let (_x_2 : sko_ty_0 list) = reverse _x_0 in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                let (_x_3 : sko_ty_0 list) = [List.hd x] in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (Is_a([], x) || not (_x_1 = y :: _x_2))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                || append _x_1 _x_3 = y :: (append _x_2 _x_3)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                [reverse, reverse, append]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                rewrite_steps
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  forward_chaining
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • subproof
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    let (_x_0 : sko_ty_0 list) = List.tl ( :var_0: ) in let (_x_1 : sko_ty_0 list) = reverse (append _x_0 [( :var_1: )]) in let (_x_2 : sko_ty_0 list) = reverse _x_0 in let (_x_3 : sko_ty_0 list) = [List.hd ( :var_0: )] in (not (_x_1 = ( :var_1: ) :: _x_2) || Is_a([], ( :var_0: ))) || append _x_1 _x_3 = ( :var_1: ) :: (append _x_2 _x_3)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Start (let (_x_0 : sko_ty_0 list) = List.tl ( :var_0: ) in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           let (_x_1 : sko_ty_0 list) = reverse (append _x_0 [( :var_1: )]) in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           let (_x_2 : sko_ty_0 list) = reverse _x_0 in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           let (_x_3 : sko_ty_0 list) = [List.hd ( :var_0: )] in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           (not (_x_1 = ( :var_1: ) :: _x_2) || Is_a([], ( :var_0: )))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           || append _x_1 _x_3 = ( :var_1: ) :: (append _x_2 _x_3) :time 0.014s)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • subproof
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  not Is_a([], x) || reverse (append x [y]) = y :: (reverse x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • start[0.129s, "1.2"]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      not Is_a([], x) || reverse (append x [y]) = y :: (reverse x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • simplify
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    into
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    [reverse, reverse, append, reverse, append]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    rewrite_steps
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      forward_chaining

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Now, if we were to try to prove our original reverse (reverse x) goal again, we'd get a shorter proof that makes use of our new lemma:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                In [21]:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                verify (fun x -> reverse (reverse x) = x) [@@induct]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Out[21]:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                - : 'a list -> bool = <fun>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Goal:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                reverse (reverse x) = x.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1 nontautological subgoal.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Subgoal 1:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 reverse (reverse x) = x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Must try induction.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                We shall induct according to a scheme derived from reverse.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Induction scheme:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (Is_a([], x) ==> φ x) && (not Is_a([], x) && φ (List.tl x) ==> φ x).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                2 nontautological subgoals.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Subgoal 1.2:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 H0. Is_a([], x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 reverse (reverse x) = x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                But simplification reduces this to true, using the definition of reverse.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Subgoal 1.1:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 H0. not Is_a([], x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 H1. reverse (reverse (List.tl x)) = List.tl x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 reverse (reverse x) = x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This simplifies, using the definition of reverse to:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Subgoal 1.1':
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 H0. reverse (reverse (List.tl x)) = List.tl x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 C0. Is_a([], x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 C1. reverse (append (reverse (List.tl x)) [List.hd x]) = x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                But simplification reduces this to true, using the rewrite rule
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                rev_app_single.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Rules:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (:def reverse)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (:rw rev_app_single)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (:induct reverse)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Proved
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                proof
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ground_instances0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                definitions3
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                inductions1
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                search_time
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                0.129s
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Expand
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • start[0.129s, "Goal"] reverse (reverse ( :var_0: )) = ( :var_0: )
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • subproof

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  reverse (reverse x) = x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • start[0.129s, "1"] reverse (reverse x) = x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • induction on (functional )
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    :scheme (Is_a([], x) ==> φ x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            && (not Is_a([], x) && φ (List.tl x) ==> φ x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Split (let (_x_0 : bool) = not Is_a([], x) in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           let (_x_1 : bool) = reverse (reverse x) = x in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           let (_x_2 : sko_ty_0 list) = List.tl x in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           (_x_0 || _x_1)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           && (not (_x_0 && reverse (reverse _x_2) = _x_2) || _x_1)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           :cases [not Is_a([], x) || reverse (reverse x) = x;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   let (_x_0 : sko_ty_0 list) = List.tl x in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   (Is_a([], x) || not (reverse (reverse _x_0) = _x_0))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   || reverse (reverse x) = x])
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • subproof
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      let (_x_0 : sko_ty_0 list) = List.tl x in (Is_a([], x) || not (reverse (reverse _x_0) = _x_0)) || reverse (reverse x) = x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • start[0.090s, "1.1"]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          let (_x_0 : sko_ty_0 list) = List.tl x in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (Is_a([], x) || not (reverse (reverse _x_0) = _x_0))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          || reverse (reverse x) = x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • simplify
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        into
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        let (_x_0 : sko_ty_0 list) = List.tl x in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        let (_x_1 : sko_ty_0 list) = reverse _x_0 in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (Is_a([], x) || not (reverse _x_1 = _x_0))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        || reverse (append _x_1 [List.hd x]) = x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        reverse
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        rewrite_steps
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          forward_chaining
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • simplify
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            into
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            rewrite_steps
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            rev_app_single
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            forward_chaining
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • subproof
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            not Is_a([], x) || reverse (reverse x) = x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • start[0.090s, "1.2"] not Is_a([], x) || reverse (reverse x) = x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • simplify
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              into
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              [reverse, reverse]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              rewrite_steps
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                forward_chaining

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Excellent!

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Reverse Append

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Now, let's try to prove another interesting conjecture about our functions append and reverse:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          reverse (append x y) = append (reverse y) (reverse x)

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Actually, first let's pretend we made a mistake in formulating this conjecture, and accidentally swapped the x and y on the RHS (Right Hand Side) of the equality. Let's constrain the types of lists involved to make the counterexample especially easy to read:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          In [22]:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          verify (fun (x : int list) y -> reverse (append x y) = append (reverse x) (reverse y))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Out[22]:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          - : int list -> int list -> bool = <fun>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          module CX : sig val x : int list val y : int list end
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Counterexample (after 21 steps, 0.044s):
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           let (x : int list) = [2]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           let (y : int list) = [4]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Refuted
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          proof attempt
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ground_instances21
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          definitions0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          inductions0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          search_time
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          0.044s
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          details
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Expand
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          smt_stats
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          num checks43
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          arith-make-feasible32
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          arith-max-columns4
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          rlimit count19593
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          mk clause102
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          datatype occurs check965
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          mk bool var1342
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          datatype splits224
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          decisions694
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          propagations856
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          conflicts54
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          datatype accessor ax205
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          minimized lits3
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          datatype constructor ax474
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          num allocs3575116263
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          final checks67
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          added eqs2889
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          del clause11
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          memory48.100000
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          max memory53.800000
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Expand
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • start[0.044s]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              reverse (append ( :var_0: ) ( :var_1: )) =
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              append (reverse ( :var_0: )) (reverse ( :var_1: ))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (reverse_3417 y_67)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (reverse_3417 x_66)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (append_3412 (reverse_3417 x_66) (reverse_3417 y_67))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (append_3412 x_66 y_67)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (reverse_3417 (append_3412 x_66 y_67))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (reverse_3417 (|get.::.1_3411| x_66))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (append_3412 (reverse_3417 (|get.::.1_3411| x_66))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     (|::_3| (|get.::.0_3410| x_66) |[]_2…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (append_3412 (|get.::.1_3411| x_66) y_67)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (reverse_3417 (|get.::.1_3411| (append_3412 x_66 y_67)))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (reverse_3417 (|get.::.1_3411| y_67))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (append_3412 (reverse_3417 (|get.::.1_3411| (append_3412 x_66 y_67)))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             (|::_3| (|get.::.…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (append_3412 (reverse_3417 (|get.::.1_3411| y_67))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               (|::_3| (|get.::.0_3410| y_67) |[]_2…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (append_3412 (|get.::.1_3411| (reverse_3417 x_66)) (reverse_3417 y_67))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (reverse_3417 (|get.::.1_3411| (|get.::.1_3411| x_66)))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (append_3412 (reverse_3417 (|get.::.1_3411| (|get.::.1_3411| x_66)))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     (|::_3| (|get.::.0…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (append_3412 (|get.::.1_3411| (reverse_3417 (|get.::.1_3411| x_66)))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       (|::_3| (|get.::.0…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (append_3412 (|get.::.1_3411| (|get.::.1_3411| x_66)) y_67)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (reverse_3417 (|get.::.1_3411| (|get.::.1_3411| (append_3412 x_66 y_67))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (let ((a!1 (reverse_3417 (|get.::.1_3411| (|get.::.1_3411| (append_3412 x_66
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       …
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (reverse_3417 (|get.::.1_3411| (|get.::.1_3411| y_67)))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (let ((a!1 (|get.::.1_3411| (reverse_3417 (|get.::.1_3411| (append_3412 x_66
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           …
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Sat (Some let (x : int list) = [2] let (y : int list) = [4] )

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Ah! Let's do it right this time:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    In [23]:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    verify (fun (x : int list) y -> reverse (append x y) = append (reverse y) (reverse x))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Out[23]:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    - : int list -> int list -> bool = <fun>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Unknown (Verified up to bound 100)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Expand
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expanded
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl (List.tl x) in append (List.tl (reverse (List.tl _x_0))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl x in append (reverse (List.tl _x_0)) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • append x y
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl (List.tl (List.tl (List.tl x))) in append (List.tl (List.tl (reverse (List.tl _x_0)))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl y in append (List.tl (reverse (List.tl _x_0))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • append (List.tl x) y
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • append (reverse (List.tl y)) [List.hd y]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • append (List.tl (List.tl (List.tl (List.tl x)))) y
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl y in append (List.tl (List.tl (List.tl (reverse (List.tl _x_0))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = append x y in append (List.tl (List.tl (List.tl (List.tl (List.tl (reverse (List.tl _x_0))))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl x in append (List.tl (List.tl (List.tl (reverse (List.tl _x_0))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • append (List.tl (reverse (List.tl x))) [List.hd x]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl (List.tl (List.tl (List.tl (append x y)))) in append (List.tl (List.tl (reverse (List.tl _x_0)))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl (List.tl (List.tl x)) in append (List.tl (reverse (List.tl _x_0))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl (List.tl x) in append (reverse (List.tl _x_0)) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • append (List.tl (List.tl (reverse y))) (reverse x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • reverse (List.tl y)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • reverse (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = append x y in append (List.tl (List.tl (List.tl (reverse (List.tl _x_0))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = append x y in append (List.tl (List.tl (reverse (List.tl _x_0)))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • append (List.tl (List.tl (List.tl (List.tl (List.tl (reverse (List.tl y))))))) [List.hd y]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = append x y in append (List.tl (List.tl (List.tl (List.tl (reverse (List.tl _x_0)))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • reverse (List.tl (List.tl (List.tl x)))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • append (List.tl (List.tl (List.tl (List.tl (reverse (List.tl x)))))) [List.hd x]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl x in append (List.tl (List.tl (List.tl (List.tl (reverse (List.tl _x_0)))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • reverse (List.tl (append x y))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • reverse (List.tl (List.tl (List.tl (List.tl y))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl (append x y) in append (List.tl (List.tl (List.tl (List.tl (reverse (List.tl _x_0)))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • append (List.tl (List.tl (List.tl (reverse (List.tl y))))) [List.hd y]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl (List.tl (List.tl x)) in append (List.tl (List.tl (reverse (List.tl _x_0)))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • append (List.tl (List.tl (List.tl x))) y
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • append (List.tl (List.tl (List.tl (reverse y)))) (reverse x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • reverse (List.tl x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x))))) in append (reverse (List.tl _x_0)) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • reverse x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • append (List.tl (List.tl (List.tl (List.tl (List.tl (reverse y)))))) (reverse x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • reverse (append x y)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl (List.tl (List.tl (List.tl (List.tl x)))) in append (List.tl (reverse (List.tl _x_0))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl (List.tl (List.tl (List.tl x))) in append (reverse (List.tl _x_0)) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • reverse (List.tl (List.tl x))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl (List.tl (List.tl y)) in append (List.tl (reverse (List.tl _x_0))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • reverse (List.tl (List.tl (List.tl (List.tl (List.tl x)))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl (List.tl y) in append (reverse (List.tl _x_0)) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl (append x y) in append (List.tl (List.tl (reverse (List.tl _x_0)))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl (List.tl y) in append (List.tl (List.tl (reverse (List.tl _x_0)))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl (append x y) in append (List.tl (reverse (List.tl _x_0))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = append x y in append (reverse (List.tl _x_0)) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl y in append (List.tl (List.tl (List.tl (List.tl (reverse (List.tl _x_0)))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl (List.tl (List.tl (List.tl (List.tl (append x y))))) in append (reverse (List.tl _x_0)) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl (append x y) in append (List.tl (List.tl (List.tl (reverse (List.tl _x_0))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • reverse (List.tl (List.tl (List.tl (List.tl (List.tl y)))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x)))))) y
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl (List.tl (List.tl (List.tl y))) in append (reverse (List.tl _x_0)) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl x in append (List.tl (List.tl (reverse (List.tl _x_0)))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • reverse (List.tl (List.tl (append x y)))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl y in append (List.tl (List.tl (reverse (List.tl _x_0)))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = append x y in append (List.tl (reverse (List.tl _x_0))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl (List.tl (List.tl (List.tl x))) in append (List.tl (reverse (List.tl _x_0))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl (List.tl (List.tl x)) in append (reverse (List.tl _x_0)) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • append (List.tl (reverse y)) (reverse x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl (List.tl x) in append (List.tl (List.tl (reverse (List.tl _x_0)))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • reverse (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (append x y)))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • reverse (List.tl (List.tl (List.tl (List.tl (List.tl (append x y))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • reverse (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (append x y))))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl (List.tl (List.tl (append x y))) in append (List.tl (List.tl (reverse (List.tl _x_0)))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x))))))) y
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • append (List.tl (List.tl (List.tl (reverse (List.tl x))))) [List.hd x]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl (List.tl (append x y)) in append (List.tl (List.tl (List.tl (reverse (List.tl _x_0))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • reverse (List.tl (List.tl (List.tl (List.tl x))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • append (List.tl (reverse (List.tl y))) [List.hd y]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • reverse (List.tl (List.tl (List.tl y)))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl x in append (List.tl (reverse (List.tl _x_0))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • append (reverse (List.tl x)) [List.hd x]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (append x y)))))) in append (reverse (List.tl _x_0)) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl (List.tl (List.tl (List.tl (append x y)))) in append (List.tl (reverse (List.tl _x_0))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl (List.tl (List.tl (append x y))) in append (reverse (List.tl _x_0)) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl (List.tl x) in append (List.tl (List.tl (List.tl (reverse (List.tl _x_0))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • reverse y
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl (List.tl (append x y)) in append (List.tl (reverse (List.tl _x_0))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl (append x y) in append (reverse (List.tl _x_0)) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • append (reverse y) (reverse x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl (List.tl (List.tl (append x y))) in append (List.tl (reverse (List.tl _x_0))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl (List.tl (append x y)) in append (reverse (List.tl _x_0)) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • reverse (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x)))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl (List.tl (append x y)) in append (List.tl (List.tl (reverse (List.tl _x_0)))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • append (List.tl (List.tl (List.tl (List.tl (reverse y))))) (reverse x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • reverse (List.tl (List.tl (List.tl (append x y))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • append (List.tl (List.tl (reverse (List.tl y)))) [List.hd y]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl (List.tl (List.tl y)) in append (reverse (List.tl _x_0)) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • append (List.tl (List.tl (reverse (List.tl x)))) [List.hd x]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl (List.tl (List.tl (List.tl (List.tl (append x y))))) in append (List.tl (reverse (List.tl _x_0))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • append (List.tl (List.tl (List.tl (List.tl (reverse (List.tl y)))))) [List.hd y]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl (List.tl (List.tl (List.tl (append x y)))) in append (reverse (List.tl _x_0)) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • append (List.tl (List.tl (List.tl (List.tl (List.tl x))))) y
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl (List.tl y) in append (List.tl (reverse (List.tl _x_0))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl y in append (reverse (List.tl _x_0)) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl (List.tl (List.tl (List.tl (List.tl x)))) in append (reverse (List.tl _x_0)) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • reverse (List.tl (List.tl y))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • append (List.tl (List.tl x)) y
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • reverse (List.tl (List.tl (List.tl (List.tl (append x y)))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    blocked
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • reverse (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl y))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • reverse (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x))))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x)))))) in append (reverse (List.tl _x_0)) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl (List.tl (List.tl (append x y))) in append (List.tl (List.tl (List.tl (reverse (List.tl _x_0))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl (List.tl (append x y)) in append (List.tl (List.tl (List.tl (List.tl (reverse (List.tl _x_0)))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x)))))))) y
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (reverse (List.tl y)))))))) [List.hd y]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl (List.tl x) in append (List.tl (List.tl (List.tl (List.tl (reverse (List.tl _x_0)))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl y in append (List.tl (List.tl (List.tl (List.tl (List.tl (reverse (List.tl _x_0))))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • append (List.tl (List.tl (List.tl (List.tl (List.tl (reverse (List.tl x))))))) [List.hd x]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (append x y)))))) in append (List.tl (reverse (List.tl _x_0))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • reverse (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (append x y)))))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = append x y in append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (reverse (List.tl _x_0)))))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl (List.tl (List.tl (List.tl (List.tl y)))) in append (reverse (List.tl _x_0)) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl (List.tl (List.tl (List.tl x))) in append (List.tl (List.tl (List.tl (reverse (List.tl _x_0))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl (List.tl (List.tl (List.tl (List.tl (append x y))))) in append (List.tl (List.tl (reverse (List.tl _x_0)))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (reverse y))))))) (reverse x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl (append x y) in append (List.tl (List.tl (List.tl (List.tl (List.tl (reverse (List.tl _x_0))))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl x in append (List.tl (List.tl (List.tl (List.tl (List.tl (reverse (List.tl _x_0))))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl (List.tl (List.tl y)) in append (List.tl (List.tl (reverse (List.tl _x_0)))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl (List.tl y) in append (List.tl (List.tl (List.tl (reverse (List.tl _x_0))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl (List.tl (List.tl x)) in append (List.tl (List.tl (List.tl (reverse (List.tl _x_0))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl (List.tl (List.tl (List.tl y))) in append (List.tl (reverse (List.tl _x_0))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl (List.tl (List.tl (List.tl (append x y)))) in append (List.tl (List.tl (List.tl (reverse (List.tl _x_0))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x))))) in append (List.tl (reverse (List.tl _x_0))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (append x y))))))) in append (reverse (List.tl _x_0)) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • let (_x_0 : int list) = List.tl (List.tl (List.tl (List.tl (List.tl x)))) in append (List.tl (List.tl (reverse (List.tl _x_0)))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    proof attempt
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ground_instances100
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    definitions0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    inductions0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    search_time
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    0.328s
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Expand
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • start[0.328s]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        reverse (append ( :var_0: ) ( :var_1: )) =
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        append (reverse ( :var_1: )) (reverse ( :var_0: ))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (reverse_2595 x_69)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (reverse_2595 y_70)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (append_2590 (reverse_2595 y_70) (reverse_2595 x_69))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (append_2590 x_69 y_70)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (reverse_2595 (append_2590 x_69 y_70))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (reverse_2595 (|get.::.1_2589| x_69))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (append_2590 (reverse_2595 (|get.::.1_2589| x_69))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               (|::_3| (|get.::.0_2588| x_69) |[]_2…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (reverse_2595 (|get.::.1_2589| y_70))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (append_2590 (reverse_2595 (|get.::.1_2589| y_70))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   (|::_3| (|get.::.0_2588| y_70) |[]_2…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (append_2590 (|get.::.1_2589| (reverse_2595 y_70)) (reverse_2595 x_69))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (append_2590 (|get.::.1_2589| x_69) y_70)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (reverse_2595 (|get.::.1_2589| (append_2590 x_69 y_70)))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (append_2590 (reverse_2595 (|get.::.1_2589| (append_2590 x_69 y_70)))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           (|::_3| (|get.::.…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (reverse_2595 (|get.::.1_2589| (|get.::.1_2589| x_69)))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (append_2590 (reverse_2595 (|get.::.1_2589| (|get.::.1_2589| x_69)))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               (|::_3| (|get.::.0…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (append_2590 (|get.::.1_2589| (reverse_2595 (|get.::.1_2589| x_69)))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (|::_3| (|get.::.0…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (append_2590 (|get.::.1_2589| (|get.::.1_2589| (reverse_2595 y_70)))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   (reverse_2595 x_69…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (append_2590 (|get.::.1_2589| (|get.::.1_2589| x_69)) y_70)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (reverse_2595 (|get.::.1_2589| (|get.::.1_2589| (append_2590 x_69 y_70))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (reverse_2595 (|get.::.1_2589| (|get.::.1_2589| y_70)))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (let ((a!1 (reverse_2595 (|get.::.1_2589| (|get.::.1_2589| (append_2590 x_69
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     …
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (let ((a!1 (|get.::.1_2589| (reverse_2595 (|get.::.1_2589| (append_2590 x_69
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       …
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (append_2590 (reverse_2595 (|get.::.1_2589| (|get.::.1_2589| y_70)))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               (|::_3| (|get.::.0…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (append_2590 (|get.::.1_2589| (reverse_2595 (|get.::.1_2589| y_70)))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (|::_3| (|get.::.0…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (reverse_2595 (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| x_69))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (let ((a!1 (reverse_2595 (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| x_69)))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (a!2 (|:…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (let ((a!1 (|get.::.1_2589| (reverse_2595 (|get.::.1_2589| (|get.::.1_2589| x_69))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (append_259…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (let ((a!1 (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| (reverse_2595 y_70))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (append_259…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (append_2590 (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| x_69))) y_70)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (let ((a!1 (|get.::.1_2589| (|get.::.1_2589| (reverse_2595 (|get.::.1_2589| x_69))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (append_259…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (let ((a!1 (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| (append_2590 x_69
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      …
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (let ((a!1 (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| (append_2590 x_69
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        …
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (reverse_2595 (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| y_70))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (let ((a!1 (reverse_2595 (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| y_70)))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (a!2 (|:…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (let ((a!1 (reverse_2595 (|get.::.1_2589| (|get.::.1_2589| (append_2590 x_69
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 …
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (let ((a!1 (|get.::.1_2589| (reverse_2595 (|get.::.1_2589| (append_2590 x_69
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   …
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (let ((a!1 (|get.::.1_2589| (|get.::.1_2589| (reverse_2595 (|get.::.1_2589| y_70))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (append_259…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (let ((a!1 (|get.::.1_2589| (reverse_2595 (|get.::.1_2589| (|get.::.1_2589| y_70))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (append_259…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (let ((a!1 (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| x_69))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (append_…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (let ((a!1 (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| x_69))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (reverse…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (let ((a!1 (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| x_69)))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (a!2 …
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (let ((a!1 (reverse_2595 (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| x_69)))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (a!2 (|:…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (let ((a!1 (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| (append_2590 x_69
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              …
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (let ((a!1 (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| (append_2590 x_69
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                …
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (let ((a!1 (|get.::.1_2589| (reverse_2595 (|get.::.1_2589| (|get.::.1_2589| x_69))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (append_259…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (let ((a!1 (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| (append_2590 x_69
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    …
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (let ((a!1 (reverse_2595 (|get.::.1_2589| (|get.::.1_2589| (append_2590 x_69
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         …
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (let ((a!1 (|get.::.1_2589| (reverse_2595 (|get.::.1_2589| (append_2590 x_69
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           …
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (let ((a!1 (|get.::.1_2589| (|get.::.1_2589| (reverse_2595 (|get.::.1_2589| y_70))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (append_259…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (let ((a!1 (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| (reverse_2595 y_70))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (append_259…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (let ((a!1 (|get.::.1_2589| (reverse_2595 (|get.::.1_2589| (|get.::.1_2589| y_70))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (append_259…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (let ((a!1 (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| x_69))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (append_…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (let ((a!1 (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| x_69))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (append_…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (let ((a!1 (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| x_69))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (reverse…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (let ((a!1 (|get.::.1_2589| (|get.::.1_2589| (reverse_2595 (|get.::.1_2589| x_69))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (append_259…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (let ((a!1 (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| x_69)))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (a!2 …
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (let ((a!1 (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| (append_2590 x_69
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          …
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (let ((a!1 (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| (append_2590 x_69
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            …
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (let ((a!1 (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| (append_2590 x_69
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              …
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (let ((a!1 (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| y_70))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (reverse…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (let ((a!1 (reverse_2595 (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| x_69)))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (a!2 (|:…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (let ((a!1 (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| (append_2590 x_69
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    …
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (let ((a!1 (reverse_2595 (|get.::.1_2589| (|get.::.1_2589| (append_2590 x_69
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         …
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (let ((a!1 (|get.::.1_2589| (reverse_2595 (|get.::.1_2589| (append_2590 x_69
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           …
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (let ((a!1 (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| y_70)))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (a!2 …
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (let ((a!1 (|get.::.1_2589| (reverse_2595 (|get.::.1_2589| (|get.::.1_2589| y_70))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (append_259…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (let ((a!1 (|get.::.1_2589| (|get.::.1_2589| (reverse_2595 (|get.::.1_2589| y_70))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (append_259…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (let ((a!1 (reverse_2595 (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| y_70)))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (a!2 (|:…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (let ((a!1 (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| x_69))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (append_…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (let ((a!1 (|get.::.1_2589| (reverse_2595 (|get.::.1_2589| (|get.::.1_2589| x_69))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (append_259…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (let ((a!1 (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| x_69))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (append_…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (let ((a!1 (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| x_69))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (append_…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (let ((a!1 (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| x_69))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (reverse…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (let ((a!1 (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| (append_2590 x_69
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            …
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (let ((a!1 (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| (reverse_2595 y_70))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (append_259…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (let ((a!1 (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| (append_2590 x_69
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                …
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (let ((a!1 (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| (append_2590 x_69
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  …
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (let ((a!1 (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| (append_2590 x_69
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    …
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (let ((a!1 (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| (append_2590 x_69
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      …
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (let ((a!1 (|get.::.1_2589| (|get.::.1_2589| (reverse_2595 (|get.::.1_2589| x_69))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (append_259…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (let ((a!1 (reverse_2595 (|get.::.1_2589| (|get.::.1_2589| (append_2590 x_69
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             …
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (let ((a!1 (|get.::.1_2589| (reverse_2595 (|get.::.1_2589| (append_2590 x_69
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               …
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (let ((a!1 (|get.::.1_2589| (reverse_2595 (|get.::.1_2589| (|get.::.1_2589| y_70))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (append_259…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (let ((a!1 (reverse_2595 (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| y_70)))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (a!2 (|:…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (let ((a!1 (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| x_69)))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (a!2 …
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (let ((a!1 (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| y_70))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (reverse…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (let ((a!1 (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| y_70))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (append_…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (let ((a!1 (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| y_70)))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (a!2 …
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (let ((a!1 (|get.::.1_2589| (|get.::.1_2589| (reverse_2595 (|get.::.1_2589| y_70))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (append_259…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (let ((a!1 (reverse_2595 (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| x_69)))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (a!2 (|:…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (let ((a!1 (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| x_69))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (append_…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (let ((a!1 (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| x_69))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (let ((a!2…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (let ((a!1 (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| x_69))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (let ((a!2…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (let ((a!1 (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| x_69))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (reverse…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (let ((a!1 (|get.::.1_2589| (reverse_2595 (|get.::.1_2589| (|get.::.1_2589| x_69))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (append_259…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (let ((a!1 (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| (append_2590 x_69
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        …
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (let ((a!1 (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| (append_2590 x_69
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          …
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (let ((a!1 (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| (append_2590 x_69
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            …
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (let ((a!1 (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| (append_2590 x_69
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              …
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expr
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (let ((a!1 (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| (|get.::.1_2589| x_69))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (let ((a!2…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expansions

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Our conjecture has passed through to depth 100 recursive unrolling, so we feel pretty confident it is true. Let's try to prove it by induction:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            In [24]:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            verify (fun x y -> reverse (append x y) = append (reverse y) (reverse x)) [@@induct]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Out[24]:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            - : 'a list -> 'a list -> bool = <fun>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Goal:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            reverse (append x y) = append (reverse y) (reverse x).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1 nontautological subgoal.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Subgoal 1:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             reverse (append x y) = append (reverse y) (reverse x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Must try induction.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            The recursive terms in the conjecture suggest 3 inductions.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Subsumption and merging reduces this to 2.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Only 1 of those schemes are unflawed.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            We shall induct according to a scheme derived from append.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Induction scheme:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             (Is_a([], x) ==> φ x y) && (not Is_a([], x) && φ (List.tl x) y ==> φ x y).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            2 nontautological subgoals.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Subgoal 1.2:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             H0. Is_a([], x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             reverse (append x y) = append (reverse y) (reverse x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            This simplifies, using the definitions of append and reverse to:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Subgoal 1.2':
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             H0. Is_a([], x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             reverse y = append (reverse y) []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Must try induction.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            We shall induct according to a scheme derived from reverse.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Induction scheme:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             (Is_a([], y) ==> φ x y) && (not Is_a([], y) && φ x (List.tl y) ==> φ x y).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            2 nontautological subgoals.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Subgoal 1.2'.2:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             H0. Is_a([], x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             H1. Is_a([], y)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             reverse y = append (reverse y) []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            But simplification reduces this to true, using the definitions of append and
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            reverse.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Subgoal 1.2'.1:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             H0. Is_a([], x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             H1. not Is_a([], y)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             H2. Is_a([], x) ==> reverse (List.tl y) = append (reverse (List.tl y)) []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             reverse y = append (reverse y) []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            This simplifies, using the definition of reverse to:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Subgoal 1.2'.1':
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             H0. reverse (List.tl y) = append (reverse (List.tl y)) []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             H1. Is_a([], x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             C0. append (reverse (List.tl y)) [List.hd y] =
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 append (append (reverse (List.tl y)) [List.hd y]) []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             C1. Is_a([], y)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            We can eliminate destructors by the following substitution:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             y -> y1 :: y2
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            This produces the modified subgoal:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Subgoal 1.2'.1'':
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             H0. reverse y2 = append (reverse y2) []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             H1. Is_a([], x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             append (reverse y2) [y1] = append (append (reverse y2) [y1]) []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Cross-fertilizing with:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             reverse y2 = append (reverse y2) []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            This produces the modified subgoal:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Subgoal 1.2'.1''':
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             H0. Is_a([], x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             append (append (reverse y2) []) [y1] = append (append (reverse y2) [y1]) []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Must try induction.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            We shall induct according to a scheme derived from reverse.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Induction scheme:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             (Is_a([], y2) ==> φ x y1 y2)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             && (not Is_a([], y2) && φ x y1 (List.tl y2) ==> φ x y1 y2).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            2 nontautological subgoals.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Subgoal 1.2'.1'''.2:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             H0. Is_a([], y2)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             H1. Is_a([], x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             append (append (reverse y2) []) [y1] = append (append (reverse y2) [y1]) []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            But simplification reduces this to true, using the definitions of append and
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            reverse.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Subgoal 1.2'.1'''.1:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             H0. not Is_a([], y2)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             H1. Is_a([], x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ==> append (append (reverse (List.tl y2)) []) [y1] =
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     append (append (reverse (List.tl y2)) [y1]) []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             H2. Is_a([], x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             append (append (reverse y2) []) [y1] = append (append (reverse y2) [y1]) []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            This simplifies, using the definition of reverse to:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Subgoal 1.2'.1'''.1':
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             H0. Is_a([], x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             H1. append (append (reverse (List.tl y2)) []) [y1] =
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 append (append (reverse (List.tl y2)) [y1]) []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             C0. append (append (append (reverse (List.tl y2)) [List.hd y2]) []) [y1] =
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 append (append (append (reverse (List.tl y2)) [List.hd y2]) [y1]) []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             C1. Is_a([], y2)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            We can eliminate destructors by the following substitution:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             y2 -> y21 :: y22
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            This produces the modified subgoal:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Subgoal 1.2'.1'''.1'':
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             H0. append (append (reverse y22) []) [y1] =
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 append (append (reverse y22) [y1]) []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             H1. Is_a([], x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             append (append (append (reverse y22) [y21]) []) [y1] =
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             append (append (append (reverse y22) [y21]) [y1]) []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Candidates for generalization:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             reverse y22
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            This produces the modified subgoal:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Subgoal 1.2'.1'''.1''':
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             H0. append (append gen_1 []) [y1] = append (append gen_1 [y1]) []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             H1. Is_a([], x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             append (append (append gen_1 [y21]) []) [y1] =
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             append (append (append gen_1 [y21]) [y1]) []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Must try induction.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             Aborting proof attempt for _verify_target.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             Rules:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (:def append)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (:def reverse)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (:induct append)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (:induct reverse)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Checkpoints:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             H0. append (append gen_1 []) [y1] = append (append gen_1 [y1]) []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             H1. Is_a([], x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             append (append (append gen_1 [y21]) []) [y1] =
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             append (append (append gen_1 [y21]) [y1]) []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             H0. Is_a([], x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             append (append (reverse y2) []) [y1] = append (append (reverse y2) [y1]) []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             H0. Is_a([], x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             reverse y = append (reverse y) []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Error[/server]: Maximum induction depth reached (3). You can set this with #max_induct.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Success! And in a proof with three inductions! If we inspect the proof, we'll see that those subsequent inductions actually suggest some very useful lemmas.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            In fact, this phenomenon of goals proved by subinductions suggesting useful lemmas happens so often, that we commonly like to work with a very low #max_induct value. Let's attempt the same proof as above, but instruct Imandra to only perform inductions of depth 1 (i.e., no subinductions allowed):

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            In [25]:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            #max_induct 1
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Out[25]:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            In [26]:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            verify (fun x y -> reverse (append x y) = append (reverse y) (reverse x)) [@@induct]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Out[26]:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            - : 'a list -> 'a list -> bool = <fun>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Goal:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            reverse (append x y) = append (reverse y) (reverse x).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1 nontautological subgoal.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Subgoal 1:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             reverse (append x y) = append (reverse y) (reverse x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Must try induction.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            The recursive terms in the conjecture suggest 3 inductions.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Subsumption and merging reduces this to 2.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Only 1 of those schemes are unflawed.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            We shall induct according to a scheme derived from append.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Induction scheme:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             (Is_a([], x) ==> φ x y) && (not Is_a([], x) && φ (List.tl x) y ==> φ x y).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            2 nontautological subgoals.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Subgoal 1.2:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             H0. Is_a([], x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             reverse (append x y) = append (reverse y) (reverse x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            This simplifies, using the definitions of append and reverse to:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Subgoal 1.2':
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             H0. Is_a([], x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             reverse y = append (reverse y) []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Must try induction.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             Aborting proof attempt for _verify_target.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             Rules:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (:def append)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (:def reverse)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (:induct append)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Checkpoints:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             H0. Is_a([], x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             reverse y = append (reverse y) []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Error[/server]: Maximum induction depth reached (1). You can set this with #max_induct.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            We see above that Imandra is unable to prove our theorem with #max_induct set to 1. However, by inspecting the subgoal Imandra was working on before it hit its #max_induct limit (nicely presented to us as a Checkpoint at the end of the proof attempt), we can find a useful lemma we should prove!

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            In particular, note this checkpoint:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            gen_1 = append gen_1 []

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            This, oriented as append gen_1 [] = gen_1 is a great rule. Note that it really does require induction, as append recurses on its first argument, not its second.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Let's ask Imandra to prove this as a theorem and to install it as a rewrite rule:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            In [27]:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            theorem append_nil x = append x [] = x [@@induct] [@@rewrite]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Out[27]:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            val append_nil : 'a list -> bool = <fun>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Goal:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            append x [] = x.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1 nontautological subgoal.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Subgoal 1:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             append x [] = x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Must try induction.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            We shall induct according to a scheme derived from append.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Induction scheme:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             (Is_a([], x) ==> φ x) && (not Is_a([], x) && φ (List.tl x) ==> φ x).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            2 nontautological subgoals.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Subgoal 1.2:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             H0. Is_a([], x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             append x [] = x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            But simplification reduces this to true, using the definition of append.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Subgoal 1.1:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             H0. not Is_a([], x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             H1. append (List.tl x) [] = List.tl x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             append x [] = x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            But simplification reduces this to true, using the definition of append.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             Rules:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (:def append)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (:induct append)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Proved
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            proof
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ground_instances0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            definitions2
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            inductions1
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            search_time
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            0.062s
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Expand
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • start[0.062s, "Goal"] append ( :var_0: ) [] = ( :var_0: )
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • subproof

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              append x [] = x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • start[0.062s, "1"] append x [] = x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • induction on (functional )
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                :scheme (Is_a([], x) ==> φ x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        && (not Is_a([], x) && φ (List.tl x) ==> φ x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Split (let (_x_0 : bool) = not Is_a([], x) in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       let (_x_1 : bool) = append x [] = x in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       let (_x_2 : sko_ty_0 list) = List.tl x in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       (_x_0 || _x_1) && (not (_x_0 && append _x_2 [] = _x_2) || _x_1)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       :cases [not Is_a([], x) || append x [] = x;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               let (_x_0 : sko_ty_0 list) = List.tl x in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               (Is_a([], x) || not (append _x_0 [] = _x_0))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               || append x [] = x])
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • subproof
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  let (_x_0 : sko_ty_0 list) = List.tl x in (Is_a([], x) || not (append _x_0 [] = _x_0)) || append x [] = x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • start[0.025s, "1.1"]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      let (_x_0 : sko_ty_0 list) = List.tl x in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (Is_a([], x) || not (append _x_0 [] = _x_0)) || append x [] = x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • simplify
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    into
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    append
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    rewrite_steps
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      forward_chaining
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • subproof
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      not Is_a([], x) || append x [] = x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • start[0.025s, "1.2"] not Is_a([], x) || append x [] = x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • simplify
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        into
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        append
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        rewrite_steps
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          forward_chaining

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Success! Now, let's return to our main goal and see if we progress any further (still with #max_induct 1) now that we have append_nil available as a rewrite rule:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    In [28]:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    verify (fun x y -> reverse (append x y) = append (reverse y) (reverse x)) [@@induct]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Out[28]:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    - : 'a list -> 'a list -> bool = <fun>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Goal:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    reverse (append x y) = append (reverse y) (reverse x).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1 nontautological subgoal.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Subgoal 1:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     reverse (append x y) = append (reverse y) (reverse x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Must try induction.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The recursive terms in the conjecture suggest 3 inductions.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Subsumption and merging reduces this to 2.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Only 1 of those schemes are unflawed.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    We shall induct according to a scheme derived from append.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Induction scheme:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     (Is_a([], x) ==> φ x y) && (not Is_a([], x) && φ (List.tl x) y ==> φ x y).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    2 nontautological subgoals.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Subgoal 1.2:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     H0. Is_a([], x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     reverse (append x y) = append (reverse y) (reverse x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    But simplification reduces this to true, using the definitions of append and
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    reverse, and the rewrite rule append_nil.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Subgoal 1.1:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     H0. not Is_a([], x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     H1. reverse (append (List.tl x) y) =
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         append (reverse y) (reverse (List.tl x))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     reverse (append x y) = append (reverse y) (reverse x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    This simplifies, using the definitions of append and reverse to:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Subgoal 1.1':
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     H0. reverse (append (List.tl x) y) =
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         append (reverse y) (reverse (List.tl x))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     C0. Is_a([], x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     C1. append (reverse (append (List.tl x) y)) [List.hd x] =
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         append (reverse y) (append (reverse (List.tl x)) [List.hd x])
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    We can eliminate destructors by the following substitution:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     x -> x1 :: x2
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    This produces the modified subgoal:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Subgoal 1.1'':
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     H0. reverse (append x2 y) = append (reverse y) (reverse x2)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     append (reverse (append x2 y)) [x1] =
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     append (reverse y) (append (reverse x2) [x1])
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Cross-fertilizing with:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     reverse (append x2 y) = append (reverse y) (reverse x2)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    This produces the modified subgoal:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Subgoal 1.1''':
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     append (append (reverse y) (reverse x2)) [x1] =
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     append (reverse y) (append (reverse x2) [x1])
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Candidates for generalization:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     reverse x2
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     reverse y
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    This produces the modified subgoal:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Subgoal 1.1'''':
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     append (append gen_2 gen_1) [x1] = append gen_2 (append gen_1 [x1])
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Must try induction.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     Aborting proof attempt for _verify_target.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     Rules:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (:def append)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (:def reverse)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (:rw append_nil)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (:induct append)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Checkpoints:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     append (append gen_2 gen_1) [x1] = append gen_2 (append gen_1 [x1])
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Error[/server]: Maximum induction depth reached (1). You can set this with #max_induct.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Yes! If we inspect Imandra's aborted proof, we see that our rewrite rule append_nil was applied exactly where we wanted it, and we now see another interesting subgoal which looks quite familiar:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    append (append gen_1 gen_2) (x1 :: []) = append gen_1 (append gen_2 (x1 :: []))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    That is, Imandra has derived, as a subgoal to be proved, an instance of the associativity of append!

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    If we set our #max_induct to 2, then Imandra would finish this proof automatically.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    But, this fact about append seems very useful and of general purpose, so let's prove it as a rewrite rule and make it available to our subsequent proof efforts.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    In [29]:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    theorem assoc_append x y z = append x (append y z) = append (append x y) z [@@induct] [@@rewrite]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Out[29]:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    val assoc_append : 'a list -> 'a list -> 'a list -> bool = <fun>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Goal:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    append x (append y z) = append (append x y) z.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1 nontautological subgoal.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Subgoal 1:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     append x (append y z) = append (append x y) z
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Must try induction.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The recursive terms in the conjecture suggest 3 inductions.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Subsumption and merging reduces this to 2.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Only 1 of those schemes are unflawed.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    We shall induct according to a scheme derived from append.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Induction scheme:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     (Is_a([], x) ==> φ x y z)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     && (not Is_a([], x) && φ (List.tl x) y z ==> φ x y z).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    2 nontautological subgoals.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Subgoal 1.2:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     H0. Is_a([], x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     append x (append y z) = append (append x y) z
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    But simplification reduces this to true, using the definition of append.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Subgoal 1.1:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     H0. not Is_a([], x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     H1. append (List.tl x) (append y z) = append (append (List.tl x) y) z
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     append x (append y z) = append (append x y) z
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    But simplification reduces this to true, using the definition of append.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     Rules:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (:def append)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (:induct append)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Proved
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    proof
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ground_instances0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    definitions5
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    inductions1
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    search_time
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    0.074s
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Expand
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • start[0.074s, "Goal"]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        append ( :var_0: ) (append ( :var_1: ) ( :var_2: )) =
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        append (append ( :var_0: ) ( :var_1: )) ( :var_2: )
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • subproof

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      append x (append y z) = append (append x y) z
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • start[0.074s, "1"] append x (append y z) = append (append x y) z
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • induction on (functional )
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        :scheme (Is_a([], x) ==> φ x y z)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                && (not Is_a([], x) && φ (List.tl x) y z ==> φ x y z)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Split (let (_x_0 : bool) = not Is_a([], x) in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               let (_x_1 : sko_ty_0 list) = append y z in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               let (_x_2 : bool) = append x _x_1 = append (append x y) z in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               let (_x_3 : sko_ty_0 list) = List.tl x in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               (_x_0 || _x_2)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               && (not (_x_0 && append _x_3 _x_1 = append (append _x_3 y) z) || _x_2)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               :cases [not Is_a([], x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       || append x (append y z) = append (append x y) z;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       let (_x_0 : sko_ty_0 list) = List.tl x in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       let (_x_1 : sko_ty_0 list) = append y z in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       (Is_a([], x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        || not (append _x_0 _x_1 = append (append _x_0 y) z))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       || append x _x_1 = append (append x y) z])
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • subproof
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          let (_x_0 : sko_ty_0 list) = List.tl x in let (_x_1 : sko_ty_0 list) = append y z in (Is_a([], x) || not (append _x_0 _x_1 = append (append _x_0 y) z)) || append x _x_1 = append (append x y) z
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • start[0.029s, "1.1"]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              let (_x_0 : sko_ty_0 list) = List.tl x in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              let (_x_1 : sko_ty_0 list) = append y z in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (Is_a([], x) || not (append _x_0 _x_1 = append (append _x_0 y) z))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              || append x _x_1 = append (append x y) z
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • simplify
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            into
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            [append, append, append]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            rewrite_steps
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              forward_chaining
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • subproof
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              not Is_a([], x) || append x (append y z) = append (append x y) z
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • start[0.029s, "1.2"]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  not Is_a([], x) || append x (append y z) = append (append x y) z
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • simplify
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                into
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                [append, append]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                rewrite_steps
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  forward_chaining

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Success! Now, let's go back to our original goal and see if we can prove it with the help of our proved rules (still with max_induct 1):

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            In [30]:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            verify (fun x y -> reverse (append x y) = append (reverse y) (reverse x)) [@@induct]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Out[30]:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            - : 'a list -> 'a list -> bool = <fun>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Goal:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            reverse (append x y) = append (reverse y) (reverse x).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1 nontautological subgoal.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Subgoal 1:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             reverse (append x y) = append (reverse y) (reverse x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Must try induction.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            The recursive terms in the conjecture suggest 3 inductions.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Subsumption and merging reduces this to 2.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Only 1 of those schemes are unflawed.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            We shall induct according to a scheme derived from append.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Induction scheme:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             (Is_a([], x) ==> φ x y) && (not Is_a([], x) && φ (List.tl x) y ==> φ x y).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            2 nontautological subgoals.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Subgoal 1.2:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             H0. Is_a([], x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             reverse (append x y) = append (reverse y) (reverse x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            But simplification reduces this to true, using the definitions of append and
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            reverse, and the rewrite rule append_nil.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Subgoal 1.1:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             H0. not Is_a([], x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             H1. reverse (append (List.tl x) y) =
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 append (reverse y) (reverse (List.tl x))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             reverse (append x y) = append (reverse y) (reverse x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            This simplifies, using the definitions of append and reverse to:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Subgoal 1.1':
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             H0. reverse (append (List.tl x) y) =
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 append (reverse y) (reverse (List.tl x))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             C0. Is_a([], x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             C1. append (reverse (append (List.tl x) y)) [List.hd x] =
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 append (reverse y) (append (reverse (List.tl x)) [List.hd x])
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            But simplification reduces this to true, using the rewrite rule assoc_append.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             Rules:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (:def append)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (:def reverse)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (:rw append_nil)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (:rw assoc_append)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (:induct append)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Proved
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            proof
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ground_instances0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            definitions6
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            inductions1
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            search_time
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            0.228s
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Expand
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • start[0.228s, "Goal"]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                reverse (append ( :var_0: ) ( :var_1: )) =
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                append (reverse ( :var_1: )) (reverse ( :var_0: ))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • subproof

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              reverse (append x y) = append (reverse y) (reverse x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • start[0.228s, "1"] reverse (append x y) = append (reverse y) (reverse x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • induction on (functional )
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                :scheme (Is_a([], x) ==> φ x y)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        && (not Is_a([], x) && φ (List.tl x) y ==> φ x y)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Split (let (_x_0 : bool) = not Is_a([], x) in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       let (_x_1 : sko_ty_0 list) = reverse y in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       let (_x_2 : bool) = reverse (append x y) = append _x_1 (reverse x) in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       let (_x_3 : sko_ty_0 list) = List.tl x in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       (_x_0 || _x_2)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       && (not (_x_0 && reverse (append _x_3 y) = append _x_1 (reverse _x_3))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           || _x_2)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       :cases [not Is_a([], x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               || reverse (append x y) = append (reverse y) (reverse x);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               let (_x_0 : sko_ty_0 list) = List.tl x in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               let (_x_1 : sko_ty_0 list) = reverse y in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               (Is_a([], x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                || not (reverse (append _x_0 y) = append _x_1 (reverse _x_0)))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               || reverse (append x y) = append _x_1 (reverse x)])
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • subproof
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  let (_x_0 : sko_ty_0 list) = List.tl x in let (_x_1 : sko_ty_0 list) = reverse y in (Is_a([], x) || not (reverse (append _x_0 y) = append _x_1 (reverse _x_0))) || reverse (append x y) = append _x_1 (reverse x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • start[0.186s, "1.1"]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      let (_x_0 : sko_ty_0 list) = List.tl x in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      let (_x_1 : sko_ty_0 list) = reverse y in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (Is_a([], x) || not (reverse (append _x_0 y) = append _x_1 (reverse _x_0)))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      || reverse (append x y) = append _x_1 (reverse x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • simplify
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    into
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    let (_x_0 : sko_ty_0 list) = List.tl x in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    let (_x_1 : sko_ty_0 list) = reverse (append _x_0 y) in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    let (_x_2 : sko_ty_0 list) = reverse y in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    let (_x_3 : sko_ty_0 list) = reverse _x_0 in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    let (_x_4 : sko_ty_0 list) = [List.hd x] in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (Is_a([], x) || not (_x_1 = append _x_2 _x_3))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    || append _x_1 _x_4 = append _x_2 (append _x_3 _x_4)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    [reverse, reverse, append]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    rewrite_steps
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      forward_chaining
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • simplify
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        into
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        rewrite_steps
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        assoc_append
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        forward_chaining
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • subproof
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        not Is_a([], x) || reverse (append x y) = append (reverse y) (reverse x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • start[0.186s, "1.2"]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            not Is_a([], x) || reverse (append x y) = append (reverse y) (reverse x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • simplify
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          into
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expansions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          [append, reverse, append]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          rewrite_steps
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          append_nil
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          forward_chaining

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Success! And our rewrite rules were used exactly where we'd hoped.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Happy proving!