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`
original:append x y
sub:append (List.tl x) y
original ordinal:Ordinal.Int (_cnt x)
sub ordinal:Ordinal.Int (_cnt (List.tl x))
path:[x <> []]
proof:
detailed proof
ground_instances:3
definitions:0
inductions:0
search_time:
0.019s
details:
Expand
smt_stats:
num checks:8
arith-make-feasible:8
arith-max-columns:12
arith-conflicts:1
rlimit count:1696
arith-cheap-eqs:2
mk clause:12
datatype occurs check:12
mk bool var:52
arith-lower:5
datatype splits:1
decisions:11
propagations:12
arith-max-rows:4
conflicts:7
datatype accessor ax:10
datatype constructor ax:8
num allocs:658599
final checks:4
added eqs:35
del clause:4
arith eq adapter:5
arith-upper:5
memory:5.080000
max memory:5.080000
Expand
  • start[0.019s]
      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
      x <> [] && _x_0 >= 0 && _x_2 >= 0
      ==> not (_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
    (not (_x_0 <> []) || Ordinal.( << ) (Ordinal.Int _x_1) (Ordinal.Int _x_2))
    || not ((x <> [] && _x_2 >= 0) && _x_1 >= 0)
    expansions:
    []
    rewrite_steps:
      forward_chaining:
      • unroll
        expr:
        (|Ordinal.<<_129/client|
          (|Ordinal.Int_114/client|
            (|`count.list { Resolved_term.spec_idx = 0;…
        expansions:
        • unroll
          expr:
          (|`count.list { Resolved_term.spec_idx = 0; spec_arg = (v.cls (cls_ty: ty_0 -> int) (const (v.val 0)…
          expansions:
          • unroll
            expr:
            (|`count.list { Resolved_term.spec_idx = 0; spec_arg = (v.cls (cls_ty: ty_0 -> int) (const (v.val 0)…
            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]:
            - : Z.t list = [1;2;3;4;5;6]
            
            In [3]:
            append [] [4;5;6]
            
            Out[3]:
            - : Z.t list = [4;5;6]
            
            In [4]:
            append [1;2;3] []
            
            Out[4]:
            - : Z.t 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]:
            - : Z.t list -> Z.t list -> bool = <fun>
            module CX : sig val x : Z.t list val y : Z.t list end
            
            Counterexample (after 1 steps, 0.020s):
            let x : int list = []
            let y : int list = [1; 2; 3; 4; 5; 6; 7; 8]
            
            Refuted
            proof attempt
            ground_instances:1
            definitions:0
            inductions:0
            search_time:
            0.021s
            details:
            Expand
            smt_stats:
            num checks:3
            arith-make-feasible:2
            arith-max-columns:11
            rlimit count:608
            mk clause:3
            datatype occurs check:28
            mk bool var:29
            datatype splits:1
            decisions:2
            propagations:2
            conflicts:1
            datatype accessor ax:10
            datatype constructor ax:2
            num allocs:1769665
            final checks:3
            added eqs:26
            memory:7.880000
            max memory:7.880000
            Expand
            • start[0.021s]
                not (append ( :var_0: ) ( :var_1: ) = 1 :: (2 :: (3 :: (4 :: …))))
            • unroll
              expr:
              (append_1677/server x_1347/client y_1348/client)
              expansions:
              • Sat (Some let x : int list = [] let y : int list = [(Z.of_nativeint (1n)); (Z.of_nativeint (2n)); (Z.of_nativeint (3n)); (Z.of_nativeint (4n)); (Z.of_nativeint (5n)); (Z.of_nativeint (6n)); (Z.of_nativeint (7n)); (Z.of_nativeint (8n))] )

              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]:
              - : Z.t list -> Z.t list -> bool = <fun>
              module CX : sig val x : Z.t list val y : Z.t list end
              
              Counterexample (after 15 steps, 0.043s):
              let x : int list = [1; 2; 3; 4]
              let y : int list = [5; 6; 7; 8]
              
              Refuted
              proof attempt
              ground_instances:15
              definitions:0
              inductions:0
              search_time:
              0.043s
              details:
              Expand
              smt_stats:
              num checks:31
              arith-assume-eqs:1
              arith-make-feasible:75
              arith-max-columns:39
              rlimit count:12037
              arith-cheap-eqs:112
              mk clause:265
              datatype occurs check:229
              mk bool var:1000
              arith-lower:106
              arith-diseq:1
              datatype splits:13
              decisions:277
              propagations:782
              interface eqs:1
              arith-max-rows:18
              conflicts:62
              datatype accessor ax:102
              minimized lits:25
              datatype constructor ax:192
              num allocs:7404525
              final checks:27
              added eqs:1975
              del clause:163
              arith eq adapter:167
              arith-upper:106
              memory:5.960000
              max memory:10.640000
              Expand
              • start[0.043s]
                  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_1695/server x_1350/client y_1351/client)
                    expansions:
                    • unroll
                      expr:
                      (|List.length_1691/server| y_1351/client)
                      expansions:
                      • unroll
                        expr:
                        (|List.length_1691/server| x_1350/client)
                        expansions:
                        • unroll
                          expr:
                          (append_1695/server (|get.::.1_1690/server| x_1350/client) y_1351/client)
                          expansions:
                          • unroll
                            expr:
                            (|List.length_1691/server| (|get.::.1_1690/server| y_1351/client))
                            expansions:
                            • unroll
                              expr:
                              (|List.length_1691/server| (|get.::.1_1690/server| x_1350/client))
                              expansions:
                              • unroll
                                expr:
                                (append_1695/server
                                  (|get.::.1_1690/server| (|get.::.1_1690/server| x_1350/client))
                                  y_1351/clien…
                                expansions:
                                • unroll
                                  expr:
                                  (|List.length_1691/server|
                                    (|get.::.1_1690/server| (|get.::.1_1690/server| y_1351/client)))
                                  expansions:
                                  • unroll
                                    expr:
                                    (|List.length_1691/server|
                                      (|get.::.1_1690/server| (|get.::.1_1690/server| x_1350/client)))
                                    expansions:
                                    • unroll
                                      expr:
                                      (append_1695/server
                                        (|get.::.1_1690/server|
                                          (|get.::.1_1690/server| (|get.::.1_1690/server| x_…
                                      expansions:
                                      • unroll
                                        expr:
                                        (|List.length_1691/server|
                                          (|get.::.1_1690/server|
                                            (|get.::.1_1690/server| (|get.::.1_1690/ser…
                                        expansions:
                                        • unroll
                                          expr:
                                          (|List.length_1691/server|
                                            (|get.::.1_1690/server|
                                              (|get.::.1_1690/server| (|get.::.1_1690/ser…
                                          expansions:
                                          • unroll
                                            expr:
                                            (let ((a!1 (|get.::.1_1690/server|
                                                         (|get.::.1_1690/server|
                                                           (|get.::.1_16…
                                            expansions:
                                            • unroll
                                              expr:
                                              (let ((a!1 (|get.::.1_1690/server|
                                                           (|get.::.1_1690/server|
                                                             (|get.::.1_16…
                                              expansions:
                                              • unroll
                                                expr:
                                                (let ((a!1 (|get.::.1_1690/server|
                                                             (|get.::.1_1690/server|
                                                               (|get.::.1_16…
                                                expansions:
                                                • Sat (Some let x : int list = [(Z.of_nativeint (1n)); (Z.of_nativeint (2n)); (Z.of_nativeint (3n)); (Z.of_nativeint (4n))] let y : int list = [(Z.of_nativeint (5n)); (Z.of_nativeint (6n)); (Z.of_nativeint (7n)); (Z.of_nativeint (8n))] )

                                                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]:
                                                - : Z.t 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 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 (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 (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 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 (append x y)))))))))))))))) z
                                                • 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 (List.tl (List.tl (List.tl (List.tl (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 x)))))))))))))))))))) (append y z)
                                                • append (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 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 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 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 (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 (append x y))))))))))))))))) z
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (append x 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 (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 x))))))))))))))))))) y
                                                • 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 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 (List.tl (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 x))))))))))))))) (append 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 (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 (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 (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 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 x)))))))))))))))) (append y z)
                                                • append (List.tl x) y
                                                • append x (append 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 (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 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 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 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 (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 (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 x))))))))))))))) y
                                                • append (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 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 (List.tl (List.tl x))))))))))) (append 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 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 (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 (append x y)))))))))))) z
                                                • 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 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 (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 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 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 x)))))) y
                                                • 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 (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 (append x 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 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 x))))))))))) y
                                                • 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 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 (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 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 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 (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 (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (append x 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))))))))))))))))))))))))) 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 x)))))))))))))))))))))))) (append 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 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 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 (List.tl (List.tl (List.tl (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 x))))) (append 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 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 (List.tl (List.tl (append x y))))))))))) z
                                                • 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 (List.tl (List.tl (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 x)))))))))))))) (append y z)
                                                • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x))))))) y
                                                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 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 (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 (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 (append x y))))))))))))))))))))))))))) z
                                                proof attempt
                                                ground_instances:100
                                                definitions:0
                                                inductions:0
                                                search_time:
                                                0.338s
                                                Expand
                                                • start[0.338s]
                                                    append ( :var_0: ) (append ( :var_1: ) ( :var_2: )) =
                                                    append (append ( :var_0: ) ( :var_1: )) ( :var_2: )
                                                • unroll
                                                  expr:
                                                  (append_1683/server
                                                    (append_1683/server x_1676/server y_1677/server)
                                                    z_1678/server)
                                                  expansions:
                                                  • unroll
                                                    expr:
                                                    (append_1683/server x_1676/server y_1677/server)
                                                    expansions:
                                                    • unroll
                                                      expr:
                                                      (append_1683/server
                                                        x_1676/server
                                                        (append_1683/server y_1677/server z_1678/server))
                                                      expansions:
                                                      • unroll
                                                        expr:
                                                        (append_1683/server y_1677/server z_1678/server)
                                                        expansions:
                                                        • unroll
                                                          expr:
                                                          (append_1683/server
                                                            (|get.::.1_1675/server| (append_1683/server x_1676/server y_1677/server))
                                                            z_…
                                                          expansions:
                                                          • unroll
                                                            expr:
                                                            (append_1683/server (|get.::.1_1675/server| x_1676/server) y_1677/server)
                                                            expansions:
                                                            • unroll
                                                              expr:
                                                              (append_1683/server
                                                                (|get.::.1_1675/server| x_1676/server)
                                                                (append_1683/server y_1677/server z_1…
                                                              expansions:
                                                              • unroll
                                                                expr:
                                                                (append_1683/server (|get.::.1_1675/server| y_1677/server) z_1678/server)
                                                                expansions:
                                                                • unroll
                                                                  expr:
                                                                  (append_1683/server
                                                                    (|get.::.1_1675/server| (|get.::.1_1675/server| x_1676/server))
                                                                    y_1677/serve…
                                                                  expansions:
                                                                  • unroll
                                                                    expr:
                                                                    (append_1683/server
                                                                      (|get.::.1_1675/server|
                                                                        (|get.::.1_1675/server| (append_1683/server x_1676…
                                                                    expansions:
                                                                    • unroll
                                                                      expr:
                                                                      (append_1683/server
                                                                        (|get.::.1_1675/server| (|get.::.1_1675/server| x_1676/server))
                                                                        (append_1683…
                                                                      expansions:
                                                                      • unroll
                                                                        expr:
                                                                        (append_1683/server
                                                                          (|get.::.1_1675/server|
                                                                            (|get.::.1_1675/server| (|get.::.1_1675/server| x_…
                                                                        expansions:
                                                                        • unroll
                                                                          expr:
                                                                          (append_1683/server
                                                                            (|get.::.1_1675/server|
                                                                              (|get.::.1_1675/server| (|get.::.1_1675/server| x_…
                                                                          expansions:
                                                                          • unroll
                                                                            expr:
                                                                            (let ((a!1 (|get.::.1_1675/server|
                                                                                         (|get.::.1_1675/server|
                                                                                           (|get.::.1_16…
                                                                            expansions:
                                                                            • unroll
                                                                              expr:
                                                                              (append_1683/server
                                                                                (|get.::.1_1675/server| (|get.::.1_1675/server| y_1677/server))
                                                                                z_1678/serve…
                                                                              expansions:
                                                                              • unroll
                                                                                expr:
                                                                                (let ((a!1 (|get.::.1_1675/server|
                                                                                             (|get.::.1_1675/server|
                                                                                               (|get.::.1_16…
                                                                                expansions:
                                                                                • unroll
                                                                                  expr:
                                                                                  (let ((a!1 (|get.::.1_1675/server|
                                                                                               (|get.::.1_1675/server|
                                                                                                 (|get.::.1_16…
                                                                                  expansions:
                                                                                  • unroll
                                                                                    expr:
                                                                                    (let ((a!1 (|get.::.1_1675/server|
                                                                                                 (|get.::.1_1675/server|
                                                                                                   (|get.::.1_16…
                                                                                    expansions:
                                                                                    • unroll
                                                                                      expr:
                                                                                      (let ((a!1 (|get.::.1_1675/server|
                                                                                                   (|get.::.1_1675/server|
                                                                                                     (|get.::.1_16…
                                                                                      expansions:
                                                                                      • unroll
                                                                                        expr:
                                                                                        (append_1683/server
                                                                                          (|get.::.1_1675/server|
                                                                                            (|get.::.1_1675/server| (|get.::.1_1675/server| y_…
                                                                                        expansions:
                                                                                        • unroll
                                                                                          expr:
                                                                                          (let ((a!1 (|get.::.1_1675/server|
                                                                                                       (|get.::.1_1675/server|
                                                                                                         (|get.::.1_16…
                                                                                          expansions:
                                                                                          • unroll
                                                                                            expr:
                                                                                            (let ((a!1 (|get.::.1_1675/server|
                                                                                                         (|get.::.1_1675/server|
                                                                                                           (|get.::.1_16…
                                                                                            expansions:
                                                                                            • unroll
                                                                                              expr:
                                                                                              (let ((a!1 (|get.::.1_1675/server|
                                                                                                           (|get.::.1_1675/server|
                                                                                                             (|get.::.1_16…
                                                                                              expansions:
                                                                                              • unroll
                                                                                                expr:
                                                                                                (let ((a!1 (|get.::.1_1675/server|
                                                                                                             (|get.::.1_1675/server|
                                                                                                               (|get.::.1_16…
                                                                                                expansions:
                                                                                                • unroll
                                                                                                  expr:
                                                                                                  (let ((a!1 (|get.::.1_1675/server|
                                                                                                               (|get.::.1_1675/server|
                                                                                                                 (|get.::.1_16…
                                                                                                  expansions:
                                                                                                  • unroll
                                                                                                    expr:
                                                                                                    (let ((a!1 (|get.::.1_1675/server|
                                                                                                                 (|get.::.1_1675/server|
                                                                                                                   (|get.::.1_16…
                                                                                                    expansions:
                                                                                                    • unroll
                                                                                                      expr:
                                                                                                      (let ((a!1 (|get.::.1_1675/server|
                                                                                                                   (|get.::.1_1675/server|
                                                                                                                     (|get.::.1_16…
                                                                                                      expansions:
                                                                                                      • unroll
                                                                                                        expr:
                                                                                                        (let ((a!1 (|get.::.1_1675/server|
                                                                                                                     (|get.::.1_1675/server|
                                                                                                                       (|get.::.1_16…
                                                                                                        expansions:
                                                                                                        • unroll
                                                                                                          expr:
                                                                                                          (let ((a!1 (|get.::.1_1675/server|
                                                                                                                       (|get.::.1_1675/server|
                                                                                                                         (|get.::.1_16…
                                                                                                          expansions:
                                                                                                          • unroll
                                                                                                            expr:
                                                                                                            (let ((a!1 (|get.::.1_1675/server|
                                                                                                                         (|get.::.1_1675/server|
                                                                                                                           (|get.::.1_16…
                                                                                                            expansions:
                                                                                                            • unroll
                                                                                                              expr:
                                                                                                              (let ((a!1 (|get.::.1_1675/server|
                                                                                                                           (|get.::.1_1675/server|
                                                                                                                             (|get.::.1_16…
                                                                                                              expansions:
                                                                                                              • unroll
                                                                                                                expr:
                                                                                                                (let ((a!1 (|get.::.1_1675/server|
                                                                                                                             (|get.::.1_1675/server|
                                                                                                                               (|get.::.1_16…
                                                                                                                expansions:
                                                                                                                • unroll
                                                                                                                  expr:
                                                                                                                  (let ((a!1 (|get.::.1_1675/server|
                                                                                                                               (|get.::.1_1675/server|
                                                                                                                                 (|get.::.1_16…
                                                                                                                  expansions:
                                                                                                                  • unroll
                                                                                                                    expr:
                                                                                                                    (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                 (|get.::.1_1675/server|
                                                                                                                                   (|get.::.1_16…
                                                                                                                    expansions:
                                                                                                                    • unroll
                                                                                                                      expr:
                                                                                                                      (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                   (|get.::.1_1675/server|
                                                                                                                                     (|get.::.1_16…
                                                                                                                      expansions:
                                                                                                                      • unroll
                                                                                                                        expr:
                                                                                                                        (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                     (|get.::.1_1675/server|
                                                                                                                                       (|get.::.1_16…
                                                                                                                        expansions:
                                                                                                                        • unroll
                                                                                                                          expr:
                                                                                                                          (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                       (|get.::.1_1675/server|
                                                                                                                                         (|get.::.1_16…
                                                                                                                          expansions:
                                                                                                                          • unroll
                                                                                                                            expr:
                                                                                                                            (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                         (|get.::.1_1675/server|
                                                                                                                                           (|get.::.1_16…
                                                                                                                            expansions:
                                                                                                                            • unroll
                                                                                                                              expr:
                                                                                                                              (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                           (|get.::.1_1675/server|
                                                                                                                                             (|get.::.1_16…
                                                                                                                              expansions:
                                                                                                                              • unroll
                                                                                                                                expr:
                                                                                                                                (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                             (|get.::.1_1675/server|
                                                                                                                                               (|get.::.1_16…
                                                                                                                                expansions:
                                                                                                                                • unroll
                                                                                                                                  expr:
                                                                                                                                  (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                               (|get.::.1_1675/server|
                                                                                                                                                 (|get.::.1_16…
                                                                                                                                  expansions:
                                                                                                                                  • unroll
                                                                                                                                    expr:
                                                                                                                                    (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                                 (|get.::.1_1675/server|
                                                                                                                                                   (|get.::.1_16…
                                                                                                                                    expansions:
                                                                                                                                    • unroll
                                                                                                                                      expr:
                                                                                                                                      (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                                   (|get.::.1_1675/server|
                                                                                                                                                     (|get.::.1_16…
                                                                                                                                      expansions:
                                                                                                                                      • unroll
                                                                                                                                        expr:
                                                                                                                                        (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                                     (|get.::.1_1675/server|
                                                                                                                                                       (|get.::.1_16…
                                                                                                                                        expansions:
                                                                                                                                        • unroll
                                                                                                                                          expr:
                                                                                                                                          (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                                       (|get.::.1_1675/server|
                                                                                                                                                         (|get.::.1_16…
                                                                                                                                          expansions:
                                                                                                                                          • unroll
                                                                                                                                            expr:
                                                                                                                                            (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                                         (|get.::.1_1675/server|
                                                                                                                                                           (|get.::.1_16…
                                                                                                                                            expansions:
                                                                                                                                            • unroll
                                                                                                                                              expr:
                                                                                                                                              (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                                           (|get.::.1_1675/server|
                                                                                                                                                             (|get.::.1_16…
                                                                                                                                              expansions:
                                                                                                                                              • unroll
                                                                                                                                                expr:
                                                                                                                                                (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                                             (|get.::.1_1675/server|
                                                                                                                                                               (|get.::.1_16…
                                                                                                                                                expansions:
                                                                                                                                                • unroll
                                                                                                                                                  expr:
                                                                                                                                                  (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                                               (|get.::.1_1675/server|
                                                                                                                                                                 (|get.::.1_16…
                                                                                                                                                  expansions:
                                                                                                                                                  • unroll
                                                                                                                                                    expr:
                                                                                                                                                    (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                                                 (|get.::.1_1675/server|
                                                                                                                                                                   (|get.::.1_16…
                                                                                                                                                    expansions:
                                                                                                                                                    • unroll
                                                                                                                                                      expr:
                                                                                                                                                      (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                                                   (|get.::.1_1675/server|
                                                                                                                                                                     (|get.::.1_16…
                                                                                                                                                      expansions:
                                                                                                                                                      • unroll
                                                                                                                                                        expr:
                                                                                                                                                        (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                                                     (|get.::.1_1675/server|
                                                                                                                                                                       (|get.::.1_16…
                                                                                                                                                        expansions:
                                                                                                                                                        • unroll
                                                                                                                                                          expr:
                                                                                                                                                          (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                                                       (|get.::.1_1675/server|
                                                                                                                                                                         (|get.::.1_16…
                                                                                                                                                          expansions:
                                                                                                                                                          • unroll
                                                                                                                                                            expr:
                                                                                                                                                            (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                                                         (|get.::.1_1675/server|
                                                                                                                                                                           (|get.::.1_16…
                                                                                                                                                            expansions:
                                                                                                                                                            • unroll
                                                                                                                                                              expr:
                                                                                                                                                              (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                                                           (|get.::.1_1675/server|
                                                                                                                                                                             (|get.::.1_16…
                                                                                                                                                              expansions:
                                                                                                                                                              • unroll
                                                                                                                                                                expr:
                                                                                                                                                                (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                                                             (|get.::.1_1675/server|
                                                                                                                                                                               (|get.::.1_16…
                                                                                                                                                                expansions:
                                                                                                                                                                • unroll
                                                                                                                                                                  expr:
                                                                                                                                                                  (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                                                               (|get.::.1_1675/server|
                                                                                                                                                                                 (|get.::.1_16…
                                                                                                                                                                  expansions:
                                                                                                                                                                  • unroll
                                                                                                                                                                    expr:
                                                                                                                                                                    (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                                                                 (|get.::.1_1675/server|
                                                                                                                                                                                   (|get.::.1_16…
                                                                                                                                                                    expansions:
                                                                                                                                                                    • unroll
                                                                                                                                                                      expr:
                                                                                                                                                                      (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                                                                   (|get.::.1_1675/server|
                                                                                                                                                                                     (|get.::.1_16…
                                                                                                                                                                      expansions:
                                                                                                                                                                      • unroll
                                                                                                                                                                        expr:
                                                                                                                                                                        (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                                                                     (|get.::.1_1675/server|
                                                                                                                                                                                       (|get.::.1_16…
                                                                                                                                                                        expansions:
                                                                                                                                                                        • unroll
                                                                                                                                                                          expr:
                                                                                                                                                                          (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                                                                       (|get.::.1_1675/server|
                                                                                                                                                                                         (|get.::.1_16…
                                                                                                                                                                          expansions:
                                                                                                                                                                          • unroll
                                                                                                                                                                            expr:
                                                                                                                                                                            (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                                                                         (|get.::.1_1675/server|
                                                                                                                                                                                           (|get.::.1_16…
                                                                                                                                                                            expansions:
                                                                                                                                                                            • unroll
                                                                                                                                                                              expr:
                                                                                                                                                                              (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                                                                           (|get.::.1_1675/server|
                                                                                                                                                                                             (|get.::.1_16…
                                                                                                                                                                              expansions:
                                                                                                                                                                              • unroll
                                                                                                                                                                                expr:
                                                                                                                                                                                (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                                                                             (|get.::.1_1675/server|
                                                                                                                                                                                               (|get.::.1_16…
                                                                                                                                                                                expansions:
                                                                                                                                                                                • unroll
                                                                                                                                                                                  expr:
                                                                                                                                                                                  (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                                                                               (|get.::.1_1675/server|
                                                                                                                                                                                                 (|get.::.1_16…
                                                                                                                                                                                  expansions:
                                                                                                                                                                                  • unroll
                                                                                                                                                                                    expr:
                                                                                                                                                                                    (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                                                                                 (|get.::.1_1675/server|
                                                                                                                                                                                                   (|get.::.1_16…
                                                                                                                                                                                    expansions:
                                                                                                                                                                                    • unroll
                                                                                                                                                                                      expr:
                                                                                                                                                                                      (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                                                                                   (|get.::.1_1675/server|
                                                                                                                                                                                                     (|get.::.1_16…
                                                                                                                                                                                      expansions:
                                                                                                                                                                                      • unroll
                                                                                                                                                                                        expr:
                                                                                                                                                                                        (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                                                                                     (|get.::.1_1675/server|
                                                                                                                                                                                                       (|get.::.1_16…
                                                                                                                                                                                        expansions:
                                                                                                                                                                                        • unroll
                                                                                                                                                                                          expr:
                                                                                                                                                                                          (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                                                                                       (|get.::.1_1675/server|
                                                                                                                                                                                                         (|get.::.1_16…
                                                                                                                                                                                          expansions:
                                                                                                                                                                                          • unroll
                                                                                                                                                                                            expr:
                                                                                                                                                                                            (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                                                                                         (|get.::.1_1675/server|
                                                                                                                                                                                                           (|get.::.1_16…
                                                                                                                                                                                            expansions:
                                                                                                                                                                                            • unroll
                                                                                                                                                                                              expr:
                                                                                                                                                                                              (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                                                                                           (|get.::.1_1675/server|
                                                                                                                                                                                                             (|get.::.1_16…
                                                                                                                                                                                              expansions:
                                                                                                                                                                                              • unroll
                                                                                                                                                                                                expr:
                                                                                                                                                                                                (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                                                                                             (|get.::.1_1675/server|
                                                                                                                                                                                                               (|get.::.1_16…
                                                                                                                                                                                                expansions:
                                                                                                                                                                                                • unroll
                                                                                                                                                                                                  expr:
                                                                                                                                                                                                  (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                                                                                               (|get.::.1_1675/server|
                                                                                                                                                                                                                 (|get.::.1_16…
                                                                                                                                                                                                  expansions:
                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                    expr:
                                                                                                                                                                                                    (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                                                                                                 (|get.::.1_1675/server|
                                                                                                                                                                                                                   (|get.::.1_16…
                                                                                                                                                                                                    expansions:
                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                      expr:
                                                                                                                                                                                                      (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                                                                                                   (|get.::.1_1675/server|
                                                                                                                                                                                                                     (|get.::.1_16…
                                                                                                                                                                                                      expansions:
                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                        expr:
                                                                                                                                                                                                        (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                                                                                                     (|get.::.1_1675/server|
                                                                                                                                                                                                                       (|get.::.1_16…
                                                                                                                                                                                                        expansions:
                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                          expr:
                                                                                                                                                                                                          (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                                                                                                       (|get.::.1_1675/server|
                                                                                                                                                                                                                         (|get.::.1_16…
                                                                                                                                                                                                          expansions:
                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                            expr:
                                                                                                                                                                                                            (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                                                                                                         (|get.::.1_1675/server|
                                                                                                                                                                                                                           (|get.::.1_16…
                                                                                                                                                                                                            expansions:
                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                              expr:
                                                                                                                                                                                                              (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                                                                                                           (|get.::.1_1675/server|
                                                                                                                                                                                                                             (|get.::.1_16…
                                                                                                                                                                                                              expansions:
                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                expr:
                                                                                                                                                                                                                (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                                                                                                             (|get.::.1_1675/server|
                                                                                                                                                                                                                               (|get.::.1_16…
                                                                                                                                                                                                                expansions:
                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                  expr:
                                                                                                                                                                                                                  (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                                                                                                               (|get.::.1_1675/server|
                                                                                                                                                                                                                                 (|get.::.1_16…
                                                                                                                                                                                                                  expansions:
                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                    expr:
                                                                                                                                                                                                                    (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                                                                                                                 (|get.::.1_1675/server|
                                                                                                                                                                                                                                   (|get.::.1_16…
                                                                                                                                                                                                                    expansions:
                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                      expr:
                                                                                                                                                                                                                      (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                                                                                                                   (|get.::.1_1675/server|
                                                                                                                                                                                                                                     (|get.::.1_16…
                                                                                                                                                                                                                      expansions:
                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                        expr:
                                                                                                                                                                                                                        (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                                                                                                                     (|get.::.1_1675/server|
                                                                                                                                                                                                                                       (|get.::.1_16…
                                                                                                                                                                                                                        expansions:
                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                          expr:
                                                                                                                                                                                                                          (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                                                                                                                       (|get.::.1_1675/server|
                                                                                                                                                                                                                                         (|get.::.1_16…
                                                                                                                                                                                                                          expansions:
                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                            expr:
                                                                                                                                                                                                                            (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                                                                                                                         (|get.::.1_1675/server|
                                                                                                                                                                                                                                           (|get.::.1_16…
                                                                                                                                                                                                                            expansions:
                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                              expr:
                                                                                                                                                                                                                              (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                                                                                                                           (|get.::.1_1675/server|
                                                                                                                                                                                                                                             (|get.::.1_16…
                                                                                                                                                                                                                              expansions:
                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                expr:
                                                                                                                                                                                                                                (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                                                                                                                             (|get.::.1_1675/server|
                                                                                                                                                                                                                                               (|get.::.1_16…
                                                                                                                                                                                                                                expansions:
                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                  expr:
                                                                                                                                                                                                                                  (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                                                                                                                               (|get.::.1_1675/server|
                                                                                                                                                                                                                                                 (|get.::.1_16…
                                                                                                                                                                                                                                  expansions:
                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                    expr:
                                                                                                                                                                                                                                    (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                                                                                                                                 (|get.::.1_1675/server|
                                                                                                                                                                                                                                                   (|get.::.1_16…
                                                                                                                                                                                                                                    expansions:
                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                      expr:
                                                                                                                                                                                                                                      (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                                                                                                                                   (|get.::.1_1675/server|
                                                                                                                                                                                                                                                     (|get.::.1_16…
                                                                                                                                                                                                                                      expansions:
                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                        expr:
                                                                                                                                                                                                                                        (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                                                                                                                                     (|get.::.1_1675/server|
                                                                                                                                                                                                                                                       (|get.::.1_16…
                                                                                                                                                                                                                                        expansions:
                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                          expr:
                                                                                                                                                                                                                                          (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                                                                                                                                       (|get.::.1_1675/server|
                                                                                                                                                                                                                                                         (|get.::.1_16…
                                                                                                                                                                                                                                          expansions:
                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                            expr:
                                                                                                                                                                                                                                            (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                                                                                                                                         (|get.::.1_1675/server|
                                                                                                                                                                                                                                                           (|get.::.1_16…
                                                                                                                                                                                                                                            expansions:
                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                              expr:
                                                                                                                                                                                                                                              (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                                                                                                                                           (|get.::.1_1675/server|
                                                                                                                                                                                                                                                             (|get.::.1_16…
                                                                                                                                                                                                                                              expansions:
                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                expr:
                                                                                                                                                                                                                                                (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                                                                                                                                             (|get.::.1_1675/server|
                                                                                                                                                                                                                                                               (|get.::.1_16…
                                                                                                                                                                                                                                                expansions:
                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                  expr:
                                                                                                                                                                                                                                                  (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                                                                                                                                               (|get.::.1_1675/server|
                                                                                                                                                                                                                                                                 (|get.::.1_16…
                                                                                                                                                                                                                                                  expansions:
                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                    expr:
                                                                                                                                                                                                                                                    (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                                                                                                                                                 (|get.::.1_1675/server|
                                                                                                                                                                                                                                                                   (|get.::.1_16…
                                                                                                                                                                                                                                                    expansions:
                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                      expr:
                                                                                                                                                                                                                                                      (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                                                                                                                                                   (|get.::.1_1675/server|
                                                                                                                                                                                                                                                                     (|get.::.1_16…
                                                                                                                                                                                                                                                      expansions:
                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                        expr:
                                                                                                                                                                                                                                                        (let ((a!1 (|get.::.1_1675/server|
                                                                                                                                                                                                                                                                     (|get.::.1_1675/server|
                                                                                                                                                                                                                                                                       (|get.::.1_16…
                                                                                                                                                                                                                                                        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:
                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                         (not (x <> []) ==> φ x y z) && (x <> [] && φ (List.tl x) y z ==> φ x y z).
                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                        2 nontautological subgoals.
                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                        Subgoal 1.2:
                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                        |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                         C0. x <> []
                                                                                                                                                                                                                                                         C1. 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. 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_instances:0
                                                                                                                                                                                                                                                        definitions:5
                                                                                                                                                                                                                                                        inductions:1
                                                                                                                                                                                                                                                        search_time:
                                                                                                                                                                                                                                                        0.128s
                                                                                                                                                                                                                                                        Expand
                                                                                                                                                                                                                                                        • start[0.128s, "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.128s, "1"] append x (append y z) = append (append x y) z
                                                                                                                                                                                                                                                          • induction on (functional ?)
                                                                                                                                                                                                                                                            :scheme (not (x <> []) ==> φ x y z)
                                                                                                                                                                                                                                                                    && (x <> [] && φ (List.tl x) y z ==> φ x y z)
                                                                                                                                                                                                                                                          • Split (let (_x_0 : bool) = 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 [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
                                                                                                                                                                                                                                                                           (not (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 (not (x <> []) || not (append _x_0 _x_1 = append (append _x_0 y) z)) || append x _x_1 = append (append x y) z
                                                                                                                                                                                                                                                              • start[0.060s, "1.1"]
                                                                                                                                                                                                                                                                  let (_x_0 : sko_ty_0 list) = List.tl x in
                                                                                                                                                                                                                                                                  let (_x_1 : sko_ty_0 list) = append y z in
                                                                                                                                                                                                                                                                  (not (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
                                                                                                                                                                                                                                                                  x <> [] || append x (append y z) = append (append x y) z
                                                                                                                                                                                                                                                                  • start[0.060s, "1.2"] 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: pp_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`
                                                                                                                                                                                                                                                                original:reverse x
                                                                                                                                                                                                                                                                sub:reverse (List.tl x)
                                                                                                                                                                                                                                                                original ordinal:Ordinal.Int (_cnt x)
                                                                                                                                                                                                                                                                sub ordinal:Ordinal.Int (_cnt (List.tl x))
                                                                                                                                                                                                                                                                path:[x <> []]
                                                                                                                                                                                                                                                                proof:
                                                                                                                                                                                                                                                                detailed proof
                                                                                                                                                                                                                                                                ground_instances:3
                                                                                                                                                                                                                                                                definitions:0
                                                                                                                                                                                                                                                                inductions:0
                                                                                                                                                                                                                                                                search_time:
                                                                                                                                                                                                                                                                0.033s
                                                                                                                                                                                                                                                                details:
                                                                                                                                                                                                                                                                Expand
                                                                                                                                                                                                                                                                smt_stats:
                                                                                                                                                                                                                                                                num checks:8
                                                                                                                                                                                                                                                                arith-make-feasible:15
                                                                                                                                                                                                                                                                arith-max-columns:13
                                                                                                                                                                                                                                                                arith-conflicts:1
                                                                                                                                                                                                                                                                rlimit count:13943
                                                                                                                                                                                                                                                                arith-cheap-eqs:4
                                                                                                                                                                                                                                                                mk clause:18
                                                                                                                                                                                                                                                                datatype occurs check:19
                                                                                                                                                                                                                                                                mk bool var:79
                                                                                                                                                                                                                                                                arith-lower:13
                                                                                                                                                                                                                                                                arith-diseq:1
                                                                                                                                                                                                                                                                datatype splits:3
                                                                                                                                                                                                                                                                decisions:18
                                                                                                                                                                                                                                                                propagations:27
                                                                                                                                                                                                                                                                arith-max-rows:5
                                                                                                                                                                                                                                                                conflicts:10
                                                                                                                                                                                                                                                                datatype accessor ax:11
                                                                                                                                                                                                                                                                minimized lits:2
                                                                                                                                                                                                                                                                datatype constructor ax:10
                                                                                                                                                                                                                                                                num allocs:166901906
                                                                                                                                                                                                                                                                final checks:6
                                                                                                                                                                                                                                                                added eqs:65
                                                                                                                                                                                                                                                                del clause:11
                                                                                                                                                                                                                                                                arith eq adapter:13
                                                                                                                                                                                                                                                                arith-upper:10
                                                                                                                                                                                                                                                                memory:7.490000
                                                                                                                                                                                                                                                                max memory:16.260000
                                                                                                                                                                                                                                                                Expand
                                                                                                                                                                                                                                                                • start[0.033s]
                                                                                                                                                                                                                                                                    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
                                                                                                                                                                                                                                                                    x <> [] && _x_0 >= 0 && _x_2 >= 0
                                                                                                                                                                                                                                                                    ==> not (_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 in
                                                                                                                                                                                                                                                                  let (_x_2 : int) = count.list (const 0) _x_0 in
                                                                                                                                                                                                                                                                  (not (_x_0 <> []) || not ((x <> [] && _x_1 >= 0) && _x_2 >= 0))
                                                                                                                                                                                                                                                                  || Ordinal.( << ) (Ordinal.Int _x_2) (Ordinal.Int _x_1)
                                                                                                                                                                                                                                                                  expansions:
                                                                                                                                                                                                                                                                  []
                                                                                                                                                                                                                                                                  rewrite_steps:
                                                                                                                                                                                                                                                                    forward_chaining:
                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                      expr:
                                                                                                                                                                                                                                                                      (|`count.list { Resolved_term.spec_idx = 0; spec_arg = (v.cls (cls_ty: ty_0 -> int) (const (v.val 0)…
                                                                                                                                                                                                                                                                      expansions:
                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                        expr:
                                                                                                                                                                                                                                                                        (|Ordinal.<<_129/client|
                                                                                                                                                                                                                                                                          (|Ordinal.Int_114/client|
                                                                                                                                                                                                                                                                            (|`count.list { Resolved_term.spec_idx = 0;…
                                                                                                                                                                                                                                                                        expansions:
                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                          expr:
                                                                                                                                                                                                                                                                          (|`count.list { Resolved_term.spec_idx = 0; spec_arg = (v.cls (cls_ty: ty_0 -> int) (const (v.val 0)…
                                                                                                                                                                                                                                                                          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]:
                                                                                                                                                                                                                                                                          - : Z.t 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 : t list end
                                                                                                                                                                                                                                                                          
                                                                                                                                                                                                                                                                          Instance (after 1 steps, 0.020s):
                                                                                                                                                                                                                                                                          type t = C_t_0
                                                                                                                                                                                                                                                                          let x : t list = []
                                                                                                                                                                                                                                                                          
                                                                                                                                                                                                                                                                          Instance
                                                                                                                                                                                                                                                                          proof attempt
                                                                                                                                                                                                                                                                          ground_instances:1
                                                                                                                                                                                                                                                                          definitions:0
                                                                                                                                                                                                                                                                          inductions:0
                                                                                                                                                                                                                                                                          search_time:
                                                                                                                                                                                                                                                                          0.020s
                                                                                                                                                                                                                                                                          details:
                                                                                                                                                                                                                                                                          Expand
                                                                                                                                                                                                                                                                          smt_stats:
                                                                                                                                                                                                                                                                          num checks:3
                                                                                                                                                                                                                                                                          arith-make-feasible:2
                                                                                                                                                                                                                                                                          arith-max-columns:4
                                                                                                                                                                                                                                                                          rlimit count:417
                                                                                                                                                                                                                                                                          mk clause:4
                                                                                                                                                                                                                                                                          datatype occurs check:2
                                                                                                                                                                                                                                                                          mk bool var:12
                                                                                                                                                                                                                                                                          decisions:1
                                                                                                                                                                                                                                                                          propagations:2
                                                                                                                                                                                                                                                                          conflicts:1
                                                                                                                                                                                                                                                                          datatype accessor ax:2
                                                                                                                                                                                                                                                                          datatype constructor ax:1
                                                                                                                                                                                                                                                                          num allocs:179965135
                                                                                                                                                                                                                                                                          final checks:2
                                                                                                                                                                                                                                                                          added eqs:9
                                                                                                                                                                                                                                                                          memory:10.210000
                                                                                                                                                                                                                                                                          max memory:16.260000
                                                                                                                                                                                                                                                                          Expand
                                                                                                                                                                                                                                                                          • start[0.020s] reverse ( :var_0: ) = ( :var_0: )
                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                            expr:
                                                                                                                                                                                                                                                                            (reverse_2041/server x_2038/server)
                                                                                                                                                                                                                                                                            expansions:
                                                                                                                                                                                                                                                                            • Sat (Some type t = C_t_0 let x : t 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 val x : t list end
                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                            Instance (after 32 steps, 0.093s):
                                                                                                                                                                                                                                                                            type t = C_t_0 | C_t_1 | C_t_2 | C_t_3
                                                                                                                                                                                                                                                                            let x : t list = [C_t_0; C_t_3; C_t_2; C_t_3; C_t_0]
                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                            Instance
                                                                                                                                                                                                                                                                            proof attempt
                                                                                                                                                                                                                                                                            ground_instances:32
                                                                                                                                                                                                                                                                            definitions:0
                                                                                                                                                                                                                                                                            inductions:0
                                                                                                                                                                                                                                                                            search_time:
                                                                                                                                                                                                                                                                            0.093s
                                                                                                                                                                                                                                                                            details:
                                                                                                                                                                                                                                                                            Expand
                                                                                                                                                                                                                                                                            smt_stats:
                                                                                                                                                                                                                                                                            num checks:65
                                                                                                                                                                                                                                                                            arith-make-feasible:79
                                                                                                                                                                                                                                                                            arith-max-columns:26
                                                                                                                                                                                                                                                                            arith-conflicts:12
                                                                                                                                                                                                                                                                            rlimit count:26720
                                                                                                                                                                                                                                                                            arith-cheap-eqs:22
                                                                                                                                                                                                                                                                            mk clause:192
                                                                                                                                                                                                                                                                            datatype occurs check:705
                                                                                                                                                                                                                                                                            mk bool var:1431
                                                                                                                                                                                                                                                                            arith-lower:44
                                                                                                                                                                                                                                                                            arith-diseq:10
                                                                                                                                                                                                                                                                            datatype splits:138
                                                                                                                                                                                                                                                                            decisions:910
                                                                                                                                                                                                                                                                            arith-propagations:1
                                                                                                                                                                                                                                                                            propagations:1240
                                                                                                                                                                                                                                                                            arith-bound-propagations-cheap:1
                                                                                                                                                                                                                                                                            arith-max-rows:14
                                                                                                                                                                                                                                                                            conflicts:86
                                                                                                                                                                                                                                                                            datatype accessor ax:209
                                                                                                                                                                                                                                                                            minimized lits:36
                                                                                                                                                                                                                                                                            datatype constructor ax:425
                                                                                                                                                                                                                                                                            num allocs:223615570
                                                                                                                                                                                                                                                                            final checks:72
                                                                                                                                                                                                                                                                            added eqs:3255
                                                                                                                                                                                                                                                                            del clause:107
                                                                                                                                                                                                                                                                            arith eq adapter:62
                                                                                                                                                                                                                                                                            arith-upper:55
                                                                                                                                                                                                                                                                            memory:8.670000
                                                                                                                                                                                                                                                                            max memory:16.260000
                                                                                                                                                                                                                                                                            Expand
                                                                                                                                                                                                                                                                            • start[0.093s]
                                                                                                                                                                                                                                                                                List.length ( :var_0: ) >= 5 && reverse ( :var_0: ) = ( :var_0: )
                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                              expr:
                                                                                                                                                                                                                                                                              (reverse_2086/server x_2079/server)
                                                                                                                                                                                                                                                                              expansions:
                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                expr:
                                                                                                                                                                                                                                                                                (|List.length_2082/server| x_2079/server)
                                                                                                                                                                                                                                                                                expansions:
                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                  expr:
                                                                                                                                                                                                                                                                                  (append_2090/server
                                                                                                                                                                                                                                                                                    (reverse_2086/server (|get.::.1_2078/server| x_2079/server))
                                                                                                                                                                                                                                                                                    (|::| (|get.::.…
                                                                                                                                                                                                                                                                                  expansions:
                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                    expr:
                                                                                                                                                                                                                                                                                    (reverse_2086/server (|get.::.1_2078/server| x_2079/server))
                                                                                                                                                                                                                                                                                    expansions:
                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                      expr:
                                                                                                                                                                                                                                                                                      (|List.length_2082/server| (|get.::.1_2078/server| x_2079/server))
                                                                                                                                                                                                                                                                                      expansions:
                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                        expr:
                                                                                                                                                                                                                                                                                        (append_2090/server
                                                                                                                                                                                                                                                                                          (reverse_2086/server
                                                                                                                                                                                                                                                                                            (|get.::.1_2078/server| (|get.::.1_2078/server| x_207…
                                                                                                                                                                                                                                                                                        expansions:
                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                          expr:
                                                                                                                                                                                                                                                                                          (reverse_2086/server
                                                                                                                                                                                                                                                                                            (|get.::.1_2078/server| (|get.::.1_2078/server| x_2079/server)))
                                                                                                                                                                                                                                                                                          expansions:
                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                            expr:
                                                                                                                                                                                                                                                                                            (|List.length_2082/server|
                                                                                                                                                                                                                                                                                              (|get.::.1_2078/server| (|get.::.1_2078/server| x_2079/server)))
                                                                                                                                                                                                                                                                                            expansions:
                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                              expr:
                                                                                                                                                                                                                                                                                              (append_2090/server
                                                                                                                                                                                                                                                                                                (|get.::.1_2078/server|
                                                                                                                                                                                                                                                                                                  (reverse_2086/server (|get.::.1_2078/server| x_207…
                                                                                                                                                                                                                                                                                              expansions:
                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                expr:
                                                                                                                                                                                                                                                                                                (let ((a!1 (|get.::.1_2078/server|
                                                                                                                                                                                                                                                                                                             (reverse_2086/server
                                                                                                                                                                                                                                                                                                               (|get.::.1_2078/…
                                                                                                                                                                                                                                                                                                expansions:
                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                  expr:
                                                                                                                                                                                                                                                                                                  (let ((a!1 (reverse_2086/server
                                                                                                                                                                                                                                                                                                               (|get.::.1_2078/server|
                                                                                                                                                                                                                                                                                                                 (|get.::.1_2078/…
                                                                                                                                                                                                                                                                                                  expansions:
                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                    expr:
                                                                                                                                                                                                                                                                                                    (reverse_2086/server
                                                                                                                                                                                                                                                                                                      (|get.::.1_2078/server|
                                                                                                                                                                                                                                                                                                        (|get.::.1_2078/server| (|get.::.1_2078/server| x…
                                                                                                                                                                                                                                                                                                    expansions:
                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                      expr:
                                                                                                                                                                                                                                                                                                      (|List.length_2082/server|
                                                                                                                                                                                                                                                                                                        (|get.::.1_2078/server|
                                                                                                                                                                                                                                                                                                          (|get.::.1_2078/server| (|get.::.1_2078/ser…
                                                                                                                                                                                                                                                                                                      expansions:
                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                        expr:
                                                                                                                                                                                                                                                                                                        (let ((a!1 (|get.::.1_2078/server|
                                                                                                                                                                                                                                                                                                                     (|get.::.1_2078/server|
                                                                                                                                                                                                                                                                                                                       (|get.::.1_20…
                                                                                                                                                                                                                                                                                                        expansions:
                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                          expr:
                                                                                                                                                                                                                                                                                                          (let ((a!1 (|get.::.1_2078/server|
                                                                                                                                                                                                                                                                                                                       (|get.::.1_2078/server|
                                                                                                                                                                                                                                                                                                                         (reverse_2086…
                                                                                                                                                                                                                                                                                                          expansions:
                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                            expr:
                                                                                                                                                                                                                                                                                                            (let ((a!1 (|get.::.1_2078/server|
                                                                                                                                                                                                                                                                                                                         (|get.::.1_2078/server|
                                                                                                                                                                                                                                                                                                                           (|get.::.1_20…
                                                                                                                                                                                                                                                                                                            expansions:
                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                              expr:
                                                                                                                                                                                                                                                                                                              (let ((a!1 (|get.::.1_2078/server|
                                                                                                                                                                                                                                                                                                                           (|get.::.1_2078/server|
                                                                                                                                                                                                                                                                                                                             (|get.::.1_20…
                                                                                                                                                                                                                                                                                                              expansions:
                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                expr:
                                                                                                                                                                                                                                                                                                                (let ((a!1 (reverse_2086/server
                                                                                                                                                                                                                                                                                                                             (|get.::.1_2078/server|
                                                                                                                                                                                                                                                                                                                               (|get.::.1_2078/…
                                                                                                                                                                                                                                                                                                                expansions:
                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                  expr:
                                                                                                                                                                                                                                                                                                                  (let ((a!1 (|get.::.1_2078/server|
                                                                                                                                                                                                                                                                                                                               (|get.::.1_2078/server|
                                                                                                                                                                                                                                                                                                                                 (|get.::.1_20…
                                                                                                                                                                                                                                                                                                                  expansions:
                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                    expr:
                                                                                                                                                                                                                                                                                                                    (let ((a!1 (|get.::.1_2078/server|
                                                                                                                                                                                                                                                                                                                                 (reverse_2086/server
                                                                                                                                                                                                                                                                                                                                   (|get.::.1_2078/…
                                                                                                                                                                                                                                                                                                                    expansions:
                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                      expr:
                                                                                                                                                                                                                                                                                                                      (let ((a!1 (|get.::.1_2078/server|
                                                                                                                                                                                                                                                                                                                                   (|get.::.1_2078/server|
                                                                                                                                                                                                                                                                                                                                     (|get.::.1_20…
                                                                                                                                                                                                                                                                                                                      expansions:
                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                        expr:
                                                                                                                                                                                                                                                                                                                        (let ((a!1 (|get.::.1_2078/server|
                                                                                                                                                                                                                                                                                                                                     (|get.::.1_2078/server|
                                                                                                                                                                                                                                                                                                                                       (|get.::.1_20…
                                                                                                                                                                                                                                                                                                                        expansions:
                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                          expr:
                                                                                                                                                                                                                                                                                                                          (let ((a!1 (|get.::.1_2078/server|
                                                                                                                                                                                                                                                                                                                                       (|get.::.1_2078/server|
                                                                                                                                                                                                                                                                                                                                         (|get.::.1_20…
                                                                                                                                                                                                                                                                                                                          expansions:
                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                            expr:
                                                                                                                                                                                                                                                                                                                            (let ((a!1 (|get.::.1_2078/server|
                                                                                                                                                                                                                                                                                                                                         (|get.::.1_2078/server|
                                                                                                                                                                                                                                                                                                                                           (reverse_2086…
                                                                                                                                                                                                                                                                                                                            expansions:
                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                              expr:
                                                                                                                                                                                                                                                                                                                              (let ((a!1 (reverse_2086/server
                                                                                                                                                                                                                                                                                                                                           (|get.::.1_2078/server|
                                                                                                                                                                                                                                                                                                                                             (|get.::.1_2078/…
                                                                                                                                                                                                                                                                                                                              expansions:
                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                expr:
                                                                                                                                                                                                                                                                                                                                (let ((a!1 (|get.::.1_2078/server|
                                                                                                                                                                                                                                                                                                                                             (|get.::.1_2078/server|
                                                                                                                                                                                                                                                                                                                                               (|get.::.1_20…
                                                                                                                                                                                                                                                                                                                                expansions:
                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                  expr:
                                                                                                                                                                                                                                                                                                                                  (let ((a!1 (|get.::.1_2078/server|
                                                                                                                                                                                                                                                                                                                                               (|get.::.1_2078/server|
                                                                                                                                                                                                                                                                                                                                                 (|get.::.1_20…
                                                                                                                                                                                                                                                                                                                                  expansions:
                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                    expr:
                                                                                                                                                                                                                                                                                                                                    (let ((a!1 (|get.::.1_2078/server|
                                                                                                                                                                                                                                                                                                                                                 (reverse_2086/server
                                                                                                                                                                                                                                                                                                                                                   (|get.::.1_2078/…
                                                                                                                                                                                                                                                                                                                                    expansions:
                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                      expr:
                                                                                                                                                                                                                                                                                                                                      (let ((a!1 (|get.::.1_2078/server|
                                                                                                                                                                                                                                                                                                                                                   (|get.::.1_2078/server|
                                                                                                                                                                                                                                                                                                                                                     (|get.::.1_20…
                                                                                                                                                                                                                                                                                                                                      expansions:
                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                        expr:
                                                                                                                                                                                                                                                                                                                                        (let ((a!1 (|get.::.1_2078/server|
                                                                                                                                                                                                                                                                                                                                                     (|get.::.1_2078/server|
                                                                                                                                                                                                                                                                                                                                                       (|get.::.1_20…
                                                                                                                                                                                                                                                                                                                                        expansions:
                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                          expr:
                                                                                                                                                                                                                                                                                                                                          (let ((a!1 (|get.::.1_2078/server|
                                                                                                                                                                                                                                                                                                                                                       (|get.::.1_2078/server|
                                                                                                                                                                                                                                                                                                                                                         (|get.::.1_20…
                                                                                                                                                                                                                                                                                                                                          expansions:
                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                            expr:
                                                                                                                                                                                                                                                                                                                                            (let ((a!1 (|get.::.1_2078/server|
                                                                                                                                                                                                                                                                                                                                                         (|get.::.1_2078/server|
                                                                                                                                                                                                                                                                                                                                                           (reverse_2086…
                                                                                                                                                                                                                                                                                                                                            expansions:
                                                                                                                                                                                                                                                                                                                                            • Sat (Some type t = C_t_0 | C_t_1 | C_t_2 | C_t_3 let x : t list = [C_t_0; C_t_3; C_t_2; C_t_3; C_t_0] )

                                                                                                                                                                                                                                                                                                                                            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]:
                                                                                                                                                                                                                                                                                                                                            - : Z.t list -> bool = <fun>
                                                                                                                                                                                                                                                                                                                                            module CX : sig val x : Z.t list end
                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                            Instance (after 32 steps, 0.131s):
                                                                                                                                                                                                                                                                                                                                            let x : int list = [11; 9; 7; 9; 11]
                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                            Instance
                                                                                                                                                                                                                                                                                                                                            proof attempt
                                                                                                                                                                                                                                                                                                                                            ground_instances:32
                                                                                                                                                                                                                                                                                                                                            definitions:0
                                                                                                                                                                                                                                                                                                                                            inductions:0
                                                                                                                                                                                                                                                                                                                                            search_time:
                                                                                                                                                                                                                                                                                                                                            0.131s
                                                                                                                                                                                                                                                                                                                                            details:
                                                                                                                                                                                                                                                                                                                                            Expand
                                                                                                                                                                                                                                                                                                                                            smt_stats:
                                                                                                                                                                                                                                                                                                                                            num checks:65
                                                                                                                                                                                                                                                                                                                                            arith-make-feasible:79
                                                                                                                                                                                                                                                                                                                                            arith-max-columns:26
                                                                                                                                                                                                                                                                                                                                            arith-conflicts:12
                                                                                                                                                                                                                                                                                                                                            rlimit count:26710
                                                                                                                                                                                                                                                                                                                                            arith-cheap-eqs:22
                                                                                                                                                                                                                                                                                                                                            mk clause:192
                                                                                                                                                                                                                                                                                                                                            datatype occurs check:705
                                                                                                                                                                                                                                                                                                                                            mk bool var:1431
                                                                                                                                                                                                                                                                                                                                            arith-lower:44
                                                                                                                                                                                                                                                                                                                                            arith-diseq:10
                                                                                                                                                                                                                                                                                                                                            datatype splits:138
                                                                                                                                                                                                                                                                                                                                            decisions:910
                                                                                                                                                                                                                                                                                                                                            arith-propagations:1
                                                                                                                                                                                                                                                                                                                                            propagations:1240
                                                                                                                                                                                                                                                                                                                                            arith-bound-propagations-cheap:1
                                                                                                                                                                                                                                                                                                                                            arith-max-rows:14
                                                                                                                                                                                                                                                                                                                                            conflicts:86
                                                                                                                                                                                                                                                                                                                                            datatype accessor ax:209
                                                                                                                                                                                                                                                                                                                                            minimized lits:36
                                                                                                                                                                                                                                                                                                                                            datatype constructor ax:425
                                                                                                                                                                                                                                                                                                                                            num allocs:259415095
                                                                                                                                                                                                                                                                                                                                            final checks:72
                                                                                                                                                                                                                                                                                                                                            added eqs:3255
                                                                                                                                                                                                                                                                                                                                            del clause:107
                                                                                                                                                                                                                                                                                                                                            arith eq adapter:62
                                                                                                                                                                                                                                                                                                                                            arith-upper:55
                                                                                                                                                                                                                                                                                                                                            memory:9.310000
                                                                                                                                                                                                                                                                                                                                            max memory:16.260000
                                                                                                                                                                                                                                                                                                                                            Expand
                                                                                                                                                                                                                                                                                                                                            • start[0.131s]
                                                                                                                                                                                                                                                                                                                                                List.length ( :var_0: ) >= 5 && reverse ( :var_0: ) = ( :var_0: )
                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                              expr:
                                                                                                                                                                                                                                                                                                                                              (reverse_2204/server x_1374/client)
                                                                                                                                                                                                                                                                                                                                              expansions:
                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                expr:
                                                                                                                                                                                                                                                                                                                                                (|List.length_2200/server| x_1374/client)
                                                                                                                                                                                                                                                                                                                                                expansions:
                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                  expr:
                                                                                                                                                                                                                                                                                                                                                  (append_2208/server
                                                                                                                                                                                                                                                                                                                                                    (reverse_2204/server (|get.::.1_2199/server| x_1374/client))
                                                                                                                                                                                                                                                                                                                                                    (|::| (|get.::.…
                                                                                                                                                                                                                                                                                                                                                  expansions:
                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                    expr:
                                                                                                                                                                                                                                                                                                                                                    (reverse_2204/server (|get.::.1_2199/server| x_1374/client))
                                                                                                                                                                                                                                                                                                                                                    expansions:
                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                      expr:
                                                                                                                                                                                                                                                                                                                                                      (|List.length_2200/server| (|get.::.1_2199/server| x_1374/client))
                                                                                                                                                                                                                                                                                                                                                      expansions:
                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                        expr:
                                                                                                                                                                                                                                                                                                                                                        (append_2208/server
                                                                                                                                                                                                                                                                                                                                                          (reverse_2204/server
                                                                                                                                                                                                                                                                                                                                                            (|get.::.1_2199/server| (|get.::.1_2199/server| x_137…
                                                                                                                                                                                                                                                                                                                                                        expansions:
                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                          expr:
                                                                                                                                                                                                                                                                                                                                                          (reverse_2204/server
                                                                                                                                                                                                                                                                                                                                                            (|get.::.1_2199/server| (|get.::.1_2199/server| x_1374/client)))
                                                                                                                                                                                                                                                                                                                                                          expansions:
                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                            expr:
                                                                                                                                                                                                                                                                                                                                                            (|List.length_2200/server|
                                                                                                                                                                                                                                                                                                                                                              (|get.::.1_2199/server| (|get.::.1_2199/server| x_1374/client)))
                                                                                                                                                                                                                                                                                                                                                            expansions:
                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                              expr:
                                                                                                                                                                                                                                                                                                                                                              (append_2208/server
                                                                                                                                                                                                                                                                                                                                                                (|get.::.1_2199/server|
                                                                                                                                                                                                                                                                                                                                                                  (reverse_2204/server (|get.::.1_2199/server| x_137…
                                                                                                                                                                                                                                                                                                                                                              expansions:
                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                expr:
                                                                                                                                                                                                                                                                                                                                                                (let ((a!1 (|get.::.1_2199/server|
                                                                                                                                                                                                                                                                                                                                                                             (reverse_2204/server
                                                                                                                                                                                                                                                                                                                                                                               (|get.::.1_2199/…
                                                                                                                                                                                                                                                                                                                                                                expansions:
                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                  expr:
                                                                                                                                                                                                                                                                                                                                                                  (let ((a!1 (reverse_2204/server
                                                                                                                                                                                                                                                                                                                                                                               (|get.::.1_2199/server|
                                                                                                                                                                                                                                                                                                                                                                                 (|get.::.1_2199/…
                                                                                                                                                                                                                                                                                                                                                                  expansions:
                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                    expr:
                                                                                                                                                                                                                                                                                                                                                                    (reverse_2204/server
                                                                                                                                                                                                                                                                                                                                                                      (|get.::.1_2199/server|
                                                                                                                                                                                                                                                                                                                                                                        (|get.::.1_2199/server| (|get.::.1_2199/server| x…
                                                                                                                                                                                                                                                                                                                                                                    expansions:
                                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                                      expr:
                                                                                                                                                                                                                                                                                                                                                                      (|List.length_2200/server|
                                                                                                                                                                                                                                                                                                                                                                        (|get.::.1_2199/server|
                                                                                                                                                                                                                                                                                                                                                                          (|get.::.1_2199/server| (|get.::.1_2199/ser…
                                                                                                                                                                                                                                                                                                                                                                      expansions:
                                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                                        expr:
                                                                                                                                                                                                                                                                                                                                                                        (let ((a!1 (|get.::.1_2199/server|
                                                                                                                                                                                                                                                                                                                                                                                     (|get.::.1_2199/server|
                                                                                                                                                                                                                                                                                                                                                                                       (|get.::.1_21…
                                                                                                                                                                                                                                                                                                                                                                        expansions:
                                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                                          expr:
                                                                                                                                                                                                                                                                                                                                                                          (let ((a!1 (|get.::.1_2199/server|
                                                                                                                                                                                                                                                                                                                                                                                       (|get.::.1_2199/server|
                                                                                                                                                                                                                                                                                                                                                                                         (reverse_2204…
                                                                                                                                                                                                                                                                                                                                                                          expansions:
                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                            expr:
                                                                                                                                                                                                                                                                                                                                                                            (let ((a!1 (|get.::.1_2199/server|
                                                                                                                                                                                                                                                                                                                                                                                         (|get.::.1_2199/server|
                                                                                                                                                                                                                                                                                                                                                                                           (|get.::.1_21…
                                                                                                                                                                                                                                                                                                                                                                            expansions:
                                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                                              expr:
                                                                                                                                                                                                                                                                                                                                                                              (let ((a!1 (|get.::.1_2199/server|
                                                                                                                                                                                                                                                                                                                                                                                           (|get.::.1_2199/server|
                                                                                                                                                                                                                                                                                                                                                                                             (|get.::.1_21…
                                                                                                                                                                                                                                                                                                                                                                              expansions:
                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                expr:
                                                                                                                                                                                                                                                                                                                                                                                (let ((a!1 (reverse_2204/server
                                                                                                                                                                                                                                                                                                                                                                                             (|get.::.1_2199/server|
                                                                                                                                                                                                                                                                                                                                                                                               (|get.::.1_2199/…
                                                                                                                                                                                                                                                                                                                                                                                expansions:
                                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                                  expr:
                                                                                                                                                                                                                                                                                                                                                                                  (let ((a!1 (|get.::.1_2199/server|
                                                                                                                                                                                                                                                                                                                                                                                               (|get.::.1_2199/server|
                                                                                                                                                                                                                                                                                                                                                                                                 (|get.::.1_21…
                                                                                                                                                                                                                                                                                                                                                                                  expansions:
                                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                                    expr:
                                                                                                                                                                                                                                                                                                                                                                                    (let ((a!1 (|get.::.1_2199/server|
                                                                                                                                                                                                                                                                                                                                                                                                 (reverse_2204/server
                                                                                                                                                                                                                                                                                                                                                                                                   (|get.::.1_2199/…
                                                                                                                                                                                                                                                                                                                                                                                    expansions:
                                                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                                                      expr:
                                                                                                                                                                                                                                                                                                                                                                                      (let ((a!1 (|get.::.1_2199/server|
                                                                                                                                                                                                                                                                                                                                                                                                   (|get.::.1_2199/server|
                                                                                                                                                                                                                                                                                                                                                                                                     (|get.::.1_21…
                                                                                                                                                                                                                                                                                                                                                                                      expansions:
                                                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                                                        expr:
                                                                                                                                                                                                                                                                                                                                                                                        (let ((a!1 (|get.::.1_2199/server|
                                                                                                                                                                                                                                                                                                                                                                                                     (|get.::.1_2199/server|
                                                                                                                                                                                                                                                                                                                                                                                                       (|get.::.1_21…
                                                                                                                                                                                                                                                                                                                                                                                        expansions:
                                                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                                                          expr:
                                                                                                                                                                                                                                                                                                                                                                                          (let ((a!1 (|get.::.1_2199/server|
                                                                                                                                                                                                                                                                                                                                                                                                       (|get.::.1_2199/server|
                                                                                                                                                                                                                                                                                                                                                                                                         (|get.::.1_21…
                                                                                                                                                                                                                                                                                                                                                                                          expansions:
                                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                                            expr:
                                                                                                                                                                                                                                                                                                                                                                                            (let ((a!1 (|get.::.1_2199/server|
                                                                                                                                                                                                                                                                                                                                                                                                         (|get.::.1_2199/server|
                                                                                                                                                                                                                                                                                                                                                                                                           (reverse_2204…
                                                                                                                                                                                                                                                                                                                                                                                            expansions:
                                                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                                                              expr:
                                                                                                                                                                                                                                                                                                                                                                                              (let ((a!1 (reverse_2204/server
                                                                                                                                                                                                                                                                                                                                                                                                           (|get.::.1_2199/server|
                                                                                                                                                                                                                                                                                                                                                                                                             (|get.::.1_2199/…
                                                                                                                                                                                                                                                                                                                                                                                              expansions:
                                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                                expr:
                                                                                                                                                                                                                                                                                                                                                                                                (let ((a!1 (|get.::.1_2199/server|
                                                                                                                                                                                                                                                                                                                                                                                                             (|get.::.1_2199/server|
                                                                                                                                                                                                                                                                                                                                                                                                               (|get.::.1_21…
                                                                                                                                                                                                                                                                                                                                                                                                expansions:
                                                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                                                  expr:
                                                                                                                                                                                                                                                                                                                                                                                                  (let ((a!1 (|get.::.1_2199/server|
                                                                                                                                                                                                                                                                                                                                                                                                               (|get.::.1_2199/server|
                                                                                                                                                                                                                                                                                                                                                                                                                 (|get.::.1_21…
                                                                                                                                                                                                                                                                                                                                                                                                  expansions:
                                                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                                                    expr:
                                                                                                                                                                                                                                                                                                                                                                                                    (let ((a!1 (|get.::.1_2199/server|
                                                                                                                                                                                                                                                                                                                                                                                                                 (reverse_2204/server
                                                                                                                                                                                                                                                                                                                                                                                                                   (|get.::.1_2199/…
                                                                                                                                                                                                                                                                                                                                                                                                    expansions:
                                                                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                                                                      expr:
                                                                                                                                                                                                                                                                                                                                                                                                      (let ((a!1 (|get.::.1_2199/server|
                                                                                                                                                                                                                                                                                                                                                                                                                   (|get.::.1_2199/server|
                                                                                                                                                                                                                                                                                                                                                                                                                     (|get.::.1_21…
                                                                                                                                                                                                                                                                                                                                                                                                      expansions:
                                                                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                                                                        expr:
                                                                                                                                                                                                                                                                                                                                                                                                        (let ((a!1 (|get.::.1_2199/server|
                                                                                                                                                                                                                                                                                                                                                                                                                     (|get.::.1_2199/server|
                                                                                                                                                                                                                                                                                                                                                                                                                       (|get.::.1_21…
                                                                                                                                                                                                                                                                                                                                                                                                        expansions:
                                                                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                                                                          expr:
                                                                                                                                                                                                                                                                                                                                                                                                          (let ((a!1 (|get.::.1_2199/server|
                                                                                                                                                                                                                                                                                                                                                                                                                       (|get.::.1_2199/server|
                                                                                                                                                                                                                                                                                                                                                                                                                         (|get.::.1_21…
                                                                                                                                                                                                                                                                                                                                                                                                          expansions:
                                                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                                                            expr:
                                                                                                                                                                                                                                                                                                                                                                                                            (let ((a!1 (|get.::.1_2199/server|
                                                                                                                                                                                                                                                                                                                                                                                                                         (|get.::.1_2199/server|
                                                                                                                                                                                                                                                                                                                                                                                                                           (reverse_2204…
                                                                                                                                                                                                                                                                                                                                                                                                            expansions:
                                                                                                                                                                                                                                                                                                                                                                                                            • Sat (Some let x : int list = [(Z.of_nativeint (11n)); (Z.of_nativeint (9n)); (Z.of_nativeint (7n)); (Z.of_nativeint (9n)); (Z.of_nativeint (11n))] )

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

                                                                                                                                                                                                                                                                                                                                                                                                            In [16]:
                                                                                                                                                                                                                                                                                                                                                                                                            reverse CX.x
                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                            Out[16]:
                                                                                                                                                                                                                                                                                                                                                                                                            - : Z.t list = [11;9;7;9;11]
                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                            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:
                                                                                                                                                                                                                                                                                                                                                                                                            • 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 (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 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 (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 (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) = 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 (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 x) 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 (reverse (List.tl x))))) [List.hd x]
                                                                                                                                                                                                                                                                                                                                                                                                            • reverse (List.tl (List.tl (List.tl 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]
                                                                                                                                                                                                                                                                                                                                                                                                            • 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]
                                                                                                                                                                                                                                                                                                                                                                                                            • 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]
                                                                                                                                                                                                                                                                                                                                                                                                            • append (List.tl (List.tl (reverse (List.tl x)))) [List.hd x]
                                                                                                                                                                                                                                                                                                                                                                                                            • reverse (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 (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 (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 (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 (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]
                                                                                                                                                                                                                                                                                                                                                                                                            • reverse (List.tl (List.tl (List.tl (List.tl x))))
                                                                                                                                                                                                                                                                                                                                                                                                            • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (reverse (List.tl x))))))))) [List.hd x]
                                                                                                                                                                                                                                                                                                                                                                                                            • 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 (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 (List.tl (reverse (List.tl _x_0))))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                            • reverse (List.tl (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 (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 (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]
                                                                                                                                                                                                                                                                                                                                                                                                            • 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) = List.tl 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 (reverse x)))))))
                                                                                                                                                                                                                                                                                                                                                                                                            • 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 (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 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 (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) = 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 (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 (reverse x))))
                                                                                                                                                                                                                                                                                                                                                                                                            • 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 (reverse x)) in append (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) = 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 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 (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]
                                                                                                                                                                                                                                                                                                                                                                                                            • 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 (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 (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]
                                                                                                                                                                                                                                                                                                                                                                                                            • 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]
                                                                                                                                                                                                                                                                                                                                                                                                            • let (_x_0 : sko_ty_0 list) = reverse x in append (List.tl (List.tl (reverse (List.tl _x_0)))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                            • append (reverse (List.tl x)) [List.hd x]
                                                                                                                                                                                                                                                                                                                                                                                                            • reverse x
                                                                                                                                                                                                                                                                                                                                                                                                            • 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]
                                                                                                                                                                                                                                                                                                                                                                                                            • reverse (List.tl (reverse x))
                                                                                                                                                                                                                                                                                                                                                                                                            • 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]
                                                                                                                                                                                                                                                                                                                                                                                                            • 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 (reverse x) in append (List.tl (reverse (List.tl _x_0))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                            • reverse (reverse x)
                                                                                                                                                                                                                                                                                                                                                                                                            • 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 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 (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 x in append (List.tl (reverse (List.tl _x_0))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                            • reverse (List.tl (List.tl (reverse 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 (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]
                                                                                                                                                                                                                                                                                                                                                                                                            • reverse (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 (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]
                                                                                                                                                                                                                                                                                                                                                                                                            • reverse (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl 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]
                                                                                                                                                                                                                                                                                                                                                                                                            • append (List.tl (reverse (List.tl x))) [List.hd x]
                                                                                                                                                                                                                                                                                                                                                                                                            • reverse (List.tl x)
                                                                                                                                                                                                                                                                                                                                                                                                            • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (reverse (List.tl x)))))))))) [List.hd 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 (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 (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]
                                                                                                                                                                                                                                                                                                                                                                                                            • let (_x_0 : sko_ty_0 list) = List.tl 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 (List.tl (List.tl (reverse 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 (List.tl (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 (reverse (List.tl x))))))) [List.hd x]
                                                                                                                                                                                                                                                                                                                                                                                                            • 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 (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 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 (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 (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 (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]
                                                                                                                                                                                                                                                                                                                                                                                                            • 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]
                                                                                                                                                                                                                                                                                                                                                                                                            • 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 (List.tl x) in append (reverse (List.tl _x_0)) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                            blocked:
                                                                                                                                                                                                                                                                                                                                                                                                            • 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 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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (List.tl (List.tl (reverse 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 (List.tl (List.tl (reverse x))))))) in append (List.tl (reverse (List.tl _x_0))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                            proof attempt
                                                                                                                                                                                                                                                                                                                                                                                                            ground_instances:100
                                                                                                                                                                                                                                                                                                                                                                                                            definitions:0
                                                                                                                                                                                                                                                                                                                                                                                                            inductions:0
                                                                                                                                                                                                                                                                                                                                                                                                            search_time:
                                                                                                                                                                                                                                                                                                                                                                                                            0.376s
                                                                                                                                                                                                                                                                                                                                                                                                            Expand
                                                                                                                                                                                                                                                                                                                                                                                                            • start[0.376s] reverse (reverse ( :var_0: )) = ( :var_0: )
                                                                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                                                                              expr:
                                                                                                                                                                                                                                                                                                                                                                                                              (reverse_1923/server (reverse_1923/server x_1920/server))
                                                                                                                                                                                                                                                                                                                                                                                                              expansions:
                                                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                expr:
                                                                                                                                                                                                                                                                                                                                                                                                                (reverse_1923/server x_1920/server)
                                                                                                                                                                                                                                                                                                                                                                                                                expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                  expr:
                                                                                                                                                                                                                                                                                                                                                                                                                  (append_1927/server
                                                                                                                                                                                                                                                                                                                                                                                                                    (reverse_1923/server
                                                                                                                                                                                                                                                                                                                                                                                                                      (|get.::.1_1919/server| (reverse_1923/server x_1920/s…
                                                                                                                                                                                                                                                                                                                                                                                                                  expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                    expr:
                                                                                                                                                                                                                                                                                                                                                                                                                    (reverse_1923/server
                                                                                                                                                                                                                                                                                                                                                                                                                      (|get.::.1_1919/server| (reverse_1923/server x_1920/server)))
                                                                                                                                                                                                                                                                                                                                                                                                                    expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                      expr:
                                                                                                                                                                                                                                                                                                                                                                                                                      (append_1927/server
                                                                                                                                                                                                                                                                                                                                                                                                                        (reverse_1923/server (|get.::.1_1919/server| x_1920/server))
                                                                                                                                                                                                                                                                                                                                                                                                                        (|::| (|get.::.…
                                                                                                                                                                                                                                                                                                                                                                                                                      expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                        expr:
                                                                                                                                                                                                                                                                                                                                                                                                                        (reverse_1923/server (|get.::.1_1919/server| x_1920/server))
                                                                                                                                                                                                                                                                                                                                                                                                                        expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                          expr:
                                                                                                                                                                                                                                                                                                                                                                                                                          (append_1927/server
                                                                                                                                                                                                                                                                                                                                                                                                                            (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                              (reverse_1923/server (|get.::.1_1919/server| x_192…
                                                                                                                                                                                                                                                                                                                                                                                                                          expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                            expr:
                                                                                                                                                                                                                                                                                                                                                                                                                            (append_1927/server
                                                                                                                                                                                                                                                                                                                                                                                                                              (reverse_1923/server
                                                                                                                                                                                                                                                                                                                                                                                                                                (|get.::.1_1919/server| (|get.::.1_1919/server| x_192…
                                                                                                                                                                                                                                                                                                                                                                                                                            expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                              expr:
                                                                                                                                                                                                                                                                                                                                                                                                                              (reverse_1923/server
                                                                                                                                                                                                                                                                                                                                                                                                                                (|get.::.1_1919/server| (|get.::.1_1919/server| x_1920/server)))
                                                                                                                                                                                                                                                                                                                                                                                                                              expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                             (reverse_1923/server
                                                                                                                                                                                                                                                                                                                                                                                                                                               (|get.::.1_1919/…
                                                                                                                                                                                                                                                                                                                                                                                                                                expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                  expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                  (let ((a!1 (reverse_1923/server
                                                                                                                                                                                                                                                                                                                                                                                                                                               (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                 (|get.::.1_1919/…
                                                                                                                                                                                                                                                                                                                                                                                                                                  expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                    expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                    (reverse_1923/server
                                                                                                                                                                                                                                                                                                                                                                                                                                      (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                        (|get.::.1_1919/server| (reverse_1923/server x_19…
                                                                                                                                                                                                                                                                                                                                                                                                                                    expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                      expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                      (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                   (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                     (reverse_1923…
                                                                                                                                                                                                                                                                                                                                                                                                                                      expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                        expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                        (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                     (reverse_1923/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                       (|get.::.1_1919/…
                                                                                                                                                                                                                                                                                                                                                                                                                                        expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                          expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                          (let ((a!1 (reverse_1923/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                       (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                         (|get.::.1_1919/…
                                                                                                                                                                                                                                                                                                                                                                                                                                          expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                            expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                            (reverse_1923/server
                                                                                                                                                                                                                                                                                                                                                                                                                                              (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                (|get.::.1_1919/server| (|get.::.1_1919/server| x…
                                                                                                                                                                                                                                                                                                                                                                                                                                            expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                              expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                              (let ((a!1 (reverse_1923/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                           (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                             (|get.::.1_1919/…
                                                                                                                                                                                                                                                                                                                                                                                                                                              expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                             (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                               (|get.::.1_19…
                                                                                                                                                                                                                                                                                                                                                                                                                                                expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                  expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                  (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                               (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (|get.::.1_19…
                                                                                                                                                                                                                                                                                                                                                                                                                                                  expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                    expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                    (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (reverse_1923/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                   (|get.::.1_1919/…
                                                                                                                                                                                                                                                                                                                                                                                                                                                    expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                      expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                      (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                   (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                     (reverse_1923…
                                                                                                                                                                                                                                                                                                                                                                                                                                                      expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                        expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                        (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                     (reverse_1923/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                       (|get.::.1_1919/…
                                                                                                                                                                                                                                                                                                                                                                                                                                                        expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                          expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                          (let ((a!1 (reverse_1923/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                       (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                         (|get.::.1_1919/…
                                                                                                                                                                                                                                                                                                                                                                                                                                                          expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                            expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                            (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                         (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                           (|get.::.1_19…
                                                                                                                                                                                                                                                                                                                                                                                                                                                            expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                              expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                              (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                           (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                             (|get.::.1_19…
                                                                                                                                                                                                                                                                                                                                                                                                                                                              expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                (let ((a!1 (reverse_1923/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                             (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                               (|get.::.1_1919/…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                               (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (|get.::.1_19…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   (|get.::.1_19…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     (|get.::.1_19…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     (reverse_1923/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       (|get.::.1_1919/…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       (reverse_1923/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         (|get.::.1_1919/…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (let ((a!1 (reverse_1923/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           (|get.::.1_1919/…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             (|get.::.1_19…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               (|get.::.1_19…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (reverse_1923…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   (|get.::.1_19…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (let ((a!1 (reverse_1923/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     (|get.::.1_1919/…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       (|get.::.1_19…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         (|get.::.1_19…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           (|get.::.1_19…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             (|get.::.1_19…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             (reverse_1923/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               (|get.::.1_1919/…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               (reverse_1923/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (|get.::.1_1919/…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (let ((a!1 (reverse_1923/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   (|get.::.1_1919/…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     (|get.::.1_19…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       (|get.::.1_19…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         (reverse_1923…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           (|get.::.1_19…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             (|get.::.1_19…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (let ((a!1 (reverse_1923/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               (|get.::.1_1919/…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (|get.::.1_19…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   (|get.::.1_19…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     (|get.::.1_19…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       (|get.::.1_19…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         (|get.::.1_19…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         (reverse_1923/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           (|get.::.1_1919/…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           (reverse_1923/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             (|get.::.1_1919/…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (let ((a!1 (reverse_1923/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               (|get.::.1_1919/…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (|get.::.1_19…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   (|get.::.1_19…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     (reverse_1923…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       (|get.::.1_19…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         (|get.::.1_19…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           (|get.::.1_19…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (let ((a!1 (reverse_1923/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             (|get.::.1_1919/…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               (|get.::.1_19…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (|get.::.1_19…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   (|get.::.1_19…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     (|get.::.1_19…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       (|get.::.1_19…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         (|get.::.1_19…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         (reverse_1923/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           (|get.::.1_1919/…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (let ((a!1 (reverse_1923/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             (|get.::.1_1919/…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               (|get.::.1_19…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               (reverse_1923/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (|get.::.1_1919/…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   (|get.::.1_19…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     (|get.::.1_19…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       (|get.::.1_19…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         (|get.::.1_19…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           (|get.::.1_19…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             (reverse_1923…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               (|get.::.1_19…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (|get.::.1_19…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   (|get.::.1_19…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (let ((a!1 (reverse_1923/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     (|get.::.1_1919/…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       (|get.::.1_19…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         (|get.::.1_19…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           (|get.::.1_19…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             (|get.::.1_19…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             (reverse_1923/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               (|get.::.1_1919/…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (let ((a!1 (reverse_1923/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (|get.::.1_1919/…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   (|get.::.1_19…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   (reverse_1923/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     (|get.::.1_1919/…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       (|get.::.1_19…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         (|get.::.1_19…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           (|get.::.1_19…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             (|get.::.1_19…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               (|get.::.1_19…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (|get.::.1_19…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (let ((a!1 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (|get.::.1_1919/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   (reverse_1923…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    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:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     (not (x <> []) ==> φ x) && (x <> [] && φ (List.tl x) ==> φ x).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    2 nontautological subgoals.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Subgoal 1.2:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     C0. x <> []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     C1. reverse (reverse x) = x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    But simplification reduces this to true, using the definition of reverse.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Subgoal 1.1:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     H0. 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. x <> []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     H1. reverse (reverse (List.tl x)) = List.tl x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     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:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     (not (gen_1 <> []) ==> φ gen_1 x1)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     && (gen_1 <> [] && φ (List.tl gen_1) x1 ==> φ gen_1 x1).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    2 nontautological subgoals.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Subgoal 1.1''''.2:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     C0. gen_1 <> []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     C1. 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. 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. gen_1 <> []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     H1. reverse (append (List.tl gen_1) [x1]) = x1 :: (reverse (List.tl gen_1))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     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_instances:4
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    definitions:11
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    inductions:2
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    search_time:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1.165s
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    details:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Expand
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    smt_stats:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    num checks:9
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    arith-make-feasible:5
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    arith-max-columns:4
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    rlimit count:92768
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    mk clause:82
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    datatype occurs check:53
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    mk bool var:143
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    datatype splits:12
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    decisions:38
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    propagations:70
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    conflicts:7
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    datatype accessor ax:15
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    datatype constructor ax:21
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    num allocs:2324365602
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    final checks:8
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    added eqs:187
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    del clause:63
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    memory:11.960000
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    max memory:20.650000
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Expand
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • start[1.165s, "Goal"] reverse (reverse ( :var_0: )) = ( :var_0: )
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • subproof

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      reverse (reverse x) = x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • start[1.164s, "1"] reverse (reverse x) = x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • induction on (functional ?)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        :scheme (not (x <> []) ==> φ x) && (x <> [] && φ (List.tl x) ==> φ x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Split (let (_x_0 : bool) = 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 [x <> [] || reverse (reverse x) = x;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       let (_x_0 : sko_ty_0 list) = List.tl x in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       (not (x <> []) || not (reverse (reverse _x_0) = _x_0))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       || reverse (reverse x) = x])
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • subproof
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          let (_x_0 : sko_ty_0 list) = List.tl x in (not (x <> []) || not (reverse (reverse _x_0) = _x_0)) || reverse (reverse x) = x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • start[1.061s, "1.1"]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              let (_x_0 : sko_ty_0 list) = List.tl x in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (not (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
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (not (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 (not (gen_1 <> []) ==> φ gen_1 x1)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        && (gen_1 <> [] && φ (List.tl gen_1) x1 ==> φ gen_1 x1)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Split (let (_x_0 : bool) = 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 [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
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               (not (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
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              x <> [] || reverse (reverse x) = x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • start[1.061s, "1.2"] 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:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             (not (x <> []) ==> φ x y) && (x <> [] && φ (List.tl x) y ==> φ x y).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            2 nontautological subgoals.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Subgoal 1.2:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             C0. x <> []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             C1. reverse (append x [y]) = y :: (reverse x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            But simplification reduces this to true, using the definitions of append and
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            reverse.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Subgoal 1.1:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             H0. 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. x <> []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             H1. reverse (append (List.tl x) [y]) = y :: (reverse (List.tl x))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             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_instances:2
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            definitions:8
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            inductions:1
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            search_time:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            0.321s
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            details:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Expand
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            smt_stats:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            num checks:5
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            arith-make-feasible:3
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            arith-max-columns:4
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            rlimit count:29831
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            mk clause:24
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            datatype occurs check:24
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            mk bool var:63
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            datatype splits:6
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            decisions:11
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            propagations:13
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            conflicts:2
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            datatype accessor ax:8
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            datatype constructor ax:8
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            num allocs:3213903528
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            final checks:4
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            added eqs:64
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            del clause:17
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            memory:18.430000
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            max memory:21.440000
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Expand
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • start[0.321s, "Goal"]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                reverse (append ( :var_0: ) [( :var_1: )]) =
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ( :var_1: ) :: (reverse ( :var_0: ))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • subproof

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              reverse (append x [y]) = y :: (reverse x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • start[0.321s, "1"] reverse (append x [y]) = y :: (reverse x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • induction on (functional ?)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                :scheme (not (x <> []) ==> φ x y)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        && (x <> [] && φ (List.tl x) y ==> φ x y)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Split (let (_x_0 : bool) = 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 [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
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               (not (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 (not (x <> []) || not (reverse (append _x_0 _x_1) = y :: (reverse _x_0))) || reverse (append x _x_1) = y :: (reverse x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • start[0.232s, "1.1"]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      let (_x_0 : sko_ty_0 list) = List.tl x in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      let (_x_1 : sko_ty_0 list) = [y] in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (not (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
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (not (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 (( :var_0: ) <> []) || not (_x_1 = ( :var_1: ) :: _x_2)) || 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 (( :var_0: ) <> []) || not (_x_1 = ( :var_1: ) :: _x_2))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               || append _x_1 _x_3 = ( :var_1: ) :: (append _x_2 _x_3) :time 0.025s)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • subproof
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      x <> [] || reverse (append x [y]) = y :: (reverse x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • start[0.232s, "1.2"] 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:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     (not (x <> []) ==> φ x) && (x <> [] && φ (List.tl x) ==> φ x).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    2 nontautological subgoals.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Subgoal 1.2:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     C0. x <> []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     C1. reverse (reverse x) = x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    But simplification reduces this to true, using the definition of reverse.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Subgoal 1.1:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     H0. 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. x <> []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     H1. reverse (reverse (List.tl x)) = List.tl x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     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_instances:0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    definitions:3
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    inductions:1
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    search_time:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    0.203s
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Expand
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • start[0.203s, "Goal"] reverse (reverse ( :var_0: )) = ( :var_0: )
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • subproof

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      reverse (reverse x) = x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • start[0.203s, "1"] reverse (reverse x) = x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • induction on (functional ?)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        :scheme (not (x <> []) ==> φ x) && (x <> [] && φ (List.tl x) ==> φ x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Split (let (_x_0 : bool) = 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 [x <> [] || reverse (reverse x) = x;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       let (_x_0 : sko_ty_0 list) = List.tl x in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       (not (x <> []) || not (reverse (reverse _x_0) = _x_0))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       || reverse (reverse x) = x])
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • subproof
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          let (_x_0 : sko_ty_0 list) = List.tl x in (not (x <> []) || not (reverse (reverse _x_0) = _x_0)) || reverse (reverse x) = x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • start[0.132s, "1.1"]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              let (_x_0 : sko_ty_0 list) = List.tl x in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (not (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
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (not (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
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                x <> [] || reverse (reverse x) = x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • start[0.132s, "1.2"] 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]:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              - : Z.t list -> Z.t list -> bool = <fun>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              module CX : sig val x : Z.t list val y : Z.t list end
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Counterexample (after 21 steps, 0.071s):
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              let x : int list = [3]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              let y : int list = [2]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Refuted
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              proof attempt
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              ground_instances:21
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              definitions:0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              inductions:0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              search_time:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              0.071s
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              details:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Expand
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              smt_stats:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              num checks:43
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              arith-make-feasible:37
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              arith-max-columns:4
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              rlimit count:21153
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              mk clause:106
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              datatype occurs check:980
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              mk bool var:1249
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              datatype splits:222
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              decisions:887
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              propagations:867
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              conflicts:57
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              datatype accessor ax:199
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              minimized lits:1
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              datatype constructor ax:475
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              final checks:69
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              added eqs:2807
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              del clause:12
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              memory:13.070000
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              max memory:24.740000
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              num allocs:4328650983.000000
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Expand
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • start[0.071s]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  reverse (append ( :var_0: ) ( :var_1: )) =
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  append (reverse ( :var_0: )) (reverse ( :var_1: ))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (append_3401/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (reverse_3406/server x_1389/client)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (reverse_3406/server y_1390/client))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (reverse_3406/server y_1390/client)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (reverse_3406/server x_1389/client)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (reverse_3406/server (append_3401/server x_1389/client y_1390/client))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (append_3401/server x_1389/client y_1390/client)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (append_3401/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (|get.::.1_3400/server| (reverse_3406/server x_1389/client))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (reverse_3406/s…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (append_3401/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (reverse_3406/server (|get.::.1_3400/server| y_1390/client))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (|::| (|get.::.…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (append_3401/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (reverse_3406/server (|get.::.1_3400/server| x_1389/client))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (|::| (|get.::.…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (reverse_3406/server (|get.::.1_3400/server| x_1389/client))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (reverse_3406/server (|get.::.1_3400/server| y_1390/client))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (append_3401/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (reverse_3406/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (|get.::.1_3400/server| (append_3401/server x_1389/cl…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (reverse_3406/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (|get.::.1_3400/server| (append_3401/server x_1389/client y_1390/client)))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (append_3401/server (|get.::.1_3400/server| x_1389/client) y_1390/client)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (append_3401/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (|get.::.1_3400/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (reverse_3406/server (|get.::.1_3400/server| x_138…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (append_3401/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (|get.::.1_3400/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (|get.::.1_3400/server| (reverse_3406/server x_138…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (append_3401/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (reverse_3406/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (|get.::.1_3400/server| (|get.::.1_3400/server| x_138…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (reverse_3406/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (|get.::.1_3400/server| (|get.::.1_3400/server| x_1389/client)))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (let ((a!1 (|get.::.1_3400/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               (reverse_3406/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (|get.::.1_3400/…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (let ((a!1 (reverse_3406/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (|get.::.1_3400/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   (|get.::.1_3400/…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (append_3401/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (|get.::.1_3400/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (reverse_3406/server (|get.::.1_3400/server| y_139…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (reverse_3406/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (|get.::.1_3400/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (|get.::.1_3400/server| (append_3401/server x_138…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Sat (Some let x : int list = [(Z.of_nativeint (3n))] let y : int list = [(Z.of_nativeint (2n))] )

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        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]:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        - : Z.t list -> Z.t list -> bool = <fun>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Unknown (Verified up to bound 100)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Expand
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expanded:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • append (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 (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 (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 (reverse (List.tl _x_0)))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • append (List.tl (List.tl (reverse (List.tl y)))) [List.hd y]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • append (List.tl (reverse (List.tl x))) [List.hd x]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • reverse (List.tl (append x y))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • 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]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • 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]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • append (List.tl (List.tl (List.tl (reverse (List.tl x))))) [List.hd x]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • reverse (List.tl x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x))))))) y
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • 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 (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 (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 (append x y))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • 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) = List.tl (List.tl y) in append (reverse (List.tl _x_0)) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • append (List.tl (List.tl x)) y
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • reverse (List.tl (List.tl y))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • append (reverse (List.tl x)) [List.hd x]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • 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]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • reverse (List.tl (List.tl (List.tl (List.tl (List.tl x)))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : int list) = 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 (reverse (List.tl _x_0)))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • reverse (List.tl (List.tl (List.tl (List.tl x))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • append (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 (reverse (List.tl _x_0))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl x)))))) y
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : int list) = 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 (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 (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 x))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • append (List.tl (List.tl (List.tl (List.tl (reverse (List.tl x)))))) [List.hd x]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • 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]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : int list) = List.tl (List.tl (List.tl y)) in append (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]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • reverse (append x y)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • reverse (List.tl (List.tl (List.tl (append x y))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • append x y
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • reverse y
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • 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]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : int list) = List.tl (List.tl y) in append (List.tl (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 (List.tl x)) in append (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 (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 (List.tl (reverse (List.tl _x_0))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • append (List.tl (List.tl (List.tl (reverse y)))) (reverse x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • append (List.tl (reverse (List.tl y))) [List.hd 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 (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 x)))) y
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • reverse (List.tl (List.tl (List.tl (List.tl y))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : int list) = 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 (List.tl (append x y)))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • 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 (List.tl (List.tl x))) y
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • reverse (List.tl (List.tl (List.tl y)))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • append (List.tl (List.tl (reverse (List.tl x)))) [List.hd x]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : int list) = append x y in append (reverse (List.tl _x_0)) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • append (reverse y) (reverse x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • reverse (List.tl (List.tl (List.tl (List.tl (List.tl y)))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • append (List.tl (List.tl (List.tl (List.tl (List.tl (reverse (List.tl y))))))) [List.hd y]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • append (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 x))) in append (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) = 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 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) = append x y in append (List.tl (List.tl (List.tl (List.tl (reverse (List.tl _x_0)))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • reverse 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]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • append (List.tl (List.tl (List.tl (List.tl (reverse y))))) (reverse 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 y in append (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 (reverse (List.tl _x_0))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • reverse (List.tl (List.tl x))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • 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 (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 (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 y))) in append (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 (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]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • append (List.tl (List.tl (reverse y))) (reverse x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • 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]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : int list) = List.tl y in append (reverse (List.tl _x_0)) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • reverse (List.tl (List.tl (append x y)))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • 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 (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)))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • 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 (append x y)))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : int list) = List.tl (List.tl (append x y)) in append (reverse (List.tl _x_0)) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • append (List.tl x) y
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • reverse (List.tl y)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (reverse y))))))) (reverse x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • 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]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • 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]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • append (reverse (List.tl y)) [List.hd y]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        blocked:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • 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 (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 (List.tl (List.tl x)))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • append (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (List.tl (reverse y)))))))) (reverse x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • 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 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 (List.tl (List.tl (List.tl (List.tl 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 y))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • let (_x_0 : int list) = List.tl (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 (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 (List.tl 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 (List.tl (List.tl (append x y)))))))))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • append (List.tl (List.tl (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 (append x 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 (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 (List.tl (reverse (List.tl x))))))) [List.hd x]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • 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 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 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 (append x 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 (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 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 (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 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 (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 (List.tl (List.tl x)) in append (List.tl (List.tl (List.tl (reverse (List.tl _x_0))))) [List.hd _x_0]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        proof attempt
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        ground_instances:100
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        definitions:0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        inductions:0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        search_time:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        0.388s
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Expand
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • start[0.388s]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            reverse (append ( :var_0: ) ( :var_1: )) =
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            append (reverse ( :var_1: )) (reverse ( :var_0: ))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (append_2536/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (reverse_2541/server y_1393/client)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (reverse_2541/server x_1392/client))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (reverse_2541/server x_1392/client)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (reverse_2541/server y_1393/client)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (reverse_2541/server (append_2536/server x_1392/client y_1393/client))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (append_2536/server x_1392/client y_1393/client)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (append_2536/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (|get.::.1_2535/server| (reverse_2541/server y_1393/client))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (reverse_2541/s…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (append_2536/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (reverse_2541/server (|get.::.1_2535/server| x_1392/client))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (|::| (|get.::.…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (reverse_2541/server (|get.::.1_2535/server| x_1392/client))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (append_2536/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (reverse_2541/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (|get.::.1_2535/server| (append_2536/server x_1392/cl…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (append_2536/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (reverse_2541/server (|get.::.1_2535/server| y_1393/client))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (|::| (|get.::.…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (reverse_2541/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (|get.::.1_2535/server| (append_2536/server x_1392/client y_1393/client)))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (reverse_2541/server (|get.::.1_2535/server| y_1393/client))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (append_2536/server (|get.::.1_2535/server| x_1392/client) y_1393/client)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (append_2536/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (|get.::.1_2535/server| (reverse_2541/server y_139…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (append_2536/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (reverse_2541/server (|get.::.1_2535/server| x_139…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (append_2536/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (reverse_2541/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (|get.::.1_2535/server| (|get.::.1_2535/server| x_139…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (reverse_2541/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (|get.::.1_2535/server| (|get.::.1_2535/server| x_1392/client)))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         (reverse_2541/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           (|get.::.1_2535/…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (append_2536/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (reverse_2541/server (|get.::.1_2535/server| y_139…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (let ((a!1 (reverse_2541/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               (|get.::.1_2535/…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (reverse_2541/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (|get.::.1_2535/server| (append_2536/server x_139…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (append_2536/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (reverse_2541/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (|get.::.1_2535/server| (|get.::.1_2535/server| y_139…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (reverse_2541/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (|get.::.1_2535/server| (|get.::.1_2535/server| y_1393/client)))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (append_2536/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (|get.::.1_2535/server| (|get.::.1_2535/server| x_1392/client))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          y_1393/clien…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         (|get.::.1_25…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         (reverse_2541/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           (|get.::.1_2535/…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             (reverse_2541…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (let ((a!1 (reverse_2541/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               (|get.::.1_2535/…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               (reverse_2541/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (|get.::.1_2535/…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   (reverse_2541…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     (|get.::.1_25…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       (|get.::.1_25…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (let ((a!1 (reverse_2541/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         (|get.::.1_2535/…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (reverse_2541/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (|get.::.1_2535/server| (|get.::.1_2535/server| y…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (let ((a!1 (reverse_2541/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             (|get.::.1_2535/…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (append_2536/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (|get.::.1_2535/server| (|get.::.1_2535/server| x_…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (reverse_2541/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (|get.::.1_2535/server| (|get.::.1_2535/server| x…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   (|get.::.1_25…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   (reverse_2541/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     (|get.::.1_2535/…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     (reverse_2541/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       (|get.::.1_2535/…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (let ((a!1 (reverse_2541/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         (|get.::.1_2535/…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           (|get.::.1_25…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             (|get.::.1_25…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               (|get.::.1_25…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (reverse_2541…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (let ((a!1 (reverse_2541/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   (|get.::.1_2535/…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     (|get.::.1_25…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       (|get.::.1_25…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         (|get.::.1_25…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         (reverse_2541/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           (|get.::.1_2535/…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           (reverse_2541/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             (|get.::.1_2535/…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (let ((a!1 (reverse_2541/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               (|get.::.1_2535/…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (|get.::.1_25…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   (|get.::.1_25…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     (reverse_2541…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       (|get.::.1_25…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         (|get.::.1_25…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           (reverse_2541…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             (|get.::.1_25…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (let ((a!1 (reverse_2541/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               (|get.::.1_2535/…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (|get.::.1_25…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   (|get.::.1_25…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     (|get.::.1_25…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       (|get.::.1_25…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         (|get.::.1_25…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         (reverse_2541/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           (|get.::.1_2535/…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             (|get.::.1_25…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               (|get.::.1_25…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (|get.::.1_25…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   (|get.::.1_25…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     (|get.::.1_25…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       (|get.::.1_25…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       (reverse_2541/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         (|get.::.1_2535/…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (let ((a!1 (reverse_2541/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           (|get.::.1_2535/…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           (reverse_2541/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             (|get.::.1_2535/…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (let ((a!1 (reverse_2541/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               (|get.::.1_2535/…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (|get.::.1_25…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   (reverse_2541…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     (|get.::.1_25…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       (reverse_2541…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         (|get.::.1_25…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           (|get.::.1_25…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             (|get.::.1_25…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               (|get.::.1_25…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (let ((a!1 (reverse_2541/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (|get.::.1_2535/…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   (|get.::.1_25…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     (|get.::.1_25…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       (|get.::.1_25…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         (|get.::.1_25…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           (|get.::.1_25…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             (|get.::.1_25…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (let ((a!1 (reverse_2541/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               (|get.::.1_2535/…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               (reverse_2541/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (|get.::.1_2535/…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (reverse_2541/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   (|get.::.1_2535/…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     (|get.::.1_25…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       (|get.::.1_25…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (let ((a!1 (reverse_2541/server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         (|get.::.1_2535/…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           (|get.::.1_25…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             (|get.::.1_25…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • unroll
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                expr:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                (let ((a!1 (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             (|get.::.1_2535/server|
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               (|get.::.1_25…
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                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:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (not (x <> []) ==> φ x y) && (x <> [] && φ (List.tl x) y ==> φ x y).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                2 nontautological subgoals.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Subgoal 1.2:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 C0. x <> []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 C1. reverse (append x y) = append (reverse y) (reverse x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This simplifies, using the definitions of append and reverse to:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Subgoal 1.2':
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 C0. x <> []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 C1. reverse y = append (reverse y) []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Must try induction.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                We shall induct according to a scheme derived from reverse.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Induction scheme:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (not (y <> []) ==> φ x y) && (y <> [] && φ x (List.tl y) ==> φ x y).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                2 nontautological subgoals.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Subgoal 1.2'.2:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 C0. y <> []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 C1. x <> []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 C2. reverse y = append (reverse y) []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                But simplification reduces this to true, using the definitions of append and
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                reverse.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Subgoal 1.2'.1:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 H0. y <> []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 H1. x <> [] || reverse (List.tl y) = append (reverse (List.tl y)) []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 C0. x <> []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 C1. 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. y <> []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 C0. append (reverse (List.tl y)) [List.hd y] =
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     append (append (reverse (List.tl y)) [List.hd y]) []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 C1. x <> []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                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) []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 C0. append (reverse y2) [y1] = append (append (reverse y2) [y1]) []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 C1. x <> []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Cross-fertilizing with:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 reverse y2 = append (reverse y2) []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This produces the modified subgoal:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Subgoal 1.2'.1''':
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 C0. append (append (reverse y2) []) [y1] =
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     append (append (reverse y2) [y1]) []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 C1. x <> []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Must try induction.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                We shall induct according to a scheme derived from reverse.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Induction scheme:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (not (y2 <> []) ==> φ x y1 y2)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 && (y2 <> [] && φ x y1 (List.tl y2) ==> φ x y1 y2).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                2 nontautological subgoals.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Subgoal 1.2'.1'''.2:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 C0. y2 <> []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 C1. append (append (reverse y2) []) [y1] =
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     append (append (reverse y2) [y1]) []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 C2. x <> []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                But simplification reduces this to true, using the definitions of append and
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                reverse.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Subgoal 1.2'.1'''.1:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 H0. y2 <> []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 H1. append (append (reverse (List.tl y2)) []) [y1] =
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     append (append (reverse (List.tl y2)) [y1]) [] || x <> []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 C0. append (append (reverse y2) []) [y1] =
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     append (append (reverse y2) [y1]) []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 C1. x <> []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This simplifies, using the definition of reverse to:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Subgoal 1.2'.1'''.1':
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 H0. y2 <> []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 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. x <> []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                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]) []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 C0. append (append (append (reverse y22) [y21]) []) [y1] =
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     append (append (append (reverse y22) [y21]) [y1]) []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 C1. x <> []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                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]) []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 C0. append (append (append gen_1 [y21]) []) [y1] =
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     append (append (append gen_1 [y21]) [y1]) []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 C1. x <> []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                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]) []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 C0. append (append (append gen_1 [y21]) []) [y1] =
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     append (append (append gen_1 [y21]) [y1]) []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 C1. x <> []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 C0. append (append (reverse y2) []) [y1] =
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     append (append (reverse y2) [y1]) []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 C1. x <> []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 C0. x <> []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 C1. reverse y = append (reverse y) []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                At <none>:1
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                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:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (not (x <> []) ==> φ x y) && (x <> [] && φ (List.tl x) y ==> φ x y).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                2 nontautological subgoals.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Subgoal 1.2:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 C0. x <> []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 C1. reverse (append x y) = append (reverse y) (reverse x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This simplifies, using the definitions of append and reverse to:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Subgoal 1.2':
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 C0. x <> []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 C1. reverse y = append (reverse y) []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Must try induction.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Aborting proof attempt for _verify_target.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Rules:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (:def append)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (:def reverse)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (:induct append)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Checkpoints:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 C0. x <> []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 C1. reverse y = append (reverse y) []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                At <none>:1
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                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:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (not (x <> []) ==> φ x) && (x <> [] && φ (List.tl x) ==> φ x).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                2 nontautological subgoals.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Subgoal 1.2:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 C0. x <> []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 C1. append x [] = x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                But simplification reduces this to true, using the definition of append.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Subgoal 1.1:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 H0. 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_instances:0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                definitions:2
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                inductions:1
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                search_time:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                0.185s
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Expand
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • start[0.185s, "Goal"] append ( :var_0: ) [] = ( :var_0: )
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • subproof

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  append x [] = x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • start[0.185s, "1"] append x [] = x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • induction on (functional ?)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    :scheme (not (x <> []) ==> φ x) && (x <> [] && φ (List.tl x) ==> φ x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Split (let (_x_0 : bool) = 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 [x <> [] || append x [] = x;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   let (_x_0 : sko_ty_0 list) = List.tl x in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   (not (x <> []) || not (append _x_0 [] = _x_0))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   || append x [] = x])
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • subproof
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      let (_x_0 : sko_ty_0 list) = List.tl x in (not (x <> []) || not (append _x_0 [] = _x_0)) || append x [] = x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • start[0.097s, "1.1"]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          let (_x_0 : sko_ty_0 list) = List.tl x in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (not (x <> []) || not (append _x_0 [] = _x_0)) || append x [] = x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • simplify
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        into:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        expansions:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        append
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        rewrite_steps:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          forward_chaining:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • subproof
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          x <> [] || append x [] = x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • start[0.097s, "1.2"] 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:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         (not (x <> []) ==> φ x y) && (x <> [] && φ (List.tl x) y ==> φ x y).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        2 nontautological subgoals.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Subgoal 1.2:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         C0. x <> []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         C1. 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. 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. x <> []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         H1. reverse (append (List.tl x) y) =
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             append (reverse y) (reverse (List.tl x))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         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])
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        At <none>:1
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        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:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         (not (x <> []) ==> φ x y z) && (x <> [] && φ (List.tl x) y z ==> φ x y z).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        2 nontautological subgoals.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Subgoal 1.2:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         C0. x <> []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         C1. 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. 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_instances:0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        definitions:5
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        inductions:1
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        search_time:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        0.170s
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Expand
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • start[0.170s, "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.170s, "1"] append x (append y z) = append (append x y) z
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • induction on (functional ?)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            :scheme (not (x <> []) ==> φ x y z)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    && (x <> [] && φ (List.tl x) y z ==> φ x y z)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Split (let (_x_0 : bool) = 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 [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
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           (not (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 (not (x <> []) || not (append _x_0 _x_1 = append (append _x_0 y) z)) || append x _x_1 = append (append x y) z
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • start[0.070s, "1.1"]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  let (_x_0 : sko_ty_0 list) = List.tl x in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  let (_x_1 : sko_ty_0 list) = append y z in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (not (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
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  x <> [] || append x (append y z) = append (append x y) z
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • start[0.070s, "1.2"] 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:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (not (x <> []) ==> φ x y) && (x <> [] && φ (List.tl x) y ==> φ x y).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                2 nontautological subgoals.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Subgoal 1.2:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 C0. x <> []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 C1. 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. 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. x <> []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 H1. reverse (append (List.tl x) y) =
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     append (reverse y) (reverse (List.tl x))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |---------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 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_instances:0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                definitions:6
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                inductions:1
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                search_time:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                0.386s
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Expand
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • start[0.386s, "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.386s, "1"] reverse (append x y) = append (reverse y) (reverse x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • induction on (functional ?)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    :scheme (not (x <> []) ==> φ x y)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            && (x <> [] && φ (List.tl x) y ==> φ x y)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Split (let (_x_0 : bool) = 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 [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
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   (not (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 (not (x <> []) || not (reverse (append _x_0 y) = append _x_1 (reverse _x_0))) || reverse (append x y) = append _x_1 (reverse x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • start[0.265s, "1.1"]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          let (_x_0 : sko_ty_0 list) = List.tl x in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          let (_x_1 : sko_ty_0 list) = reverse y in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (not (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
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (not (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
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            x <> [] || reverse (append x y) = append (reverse y) (reverse x)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • start[0.265s, "1.2"]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                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!