Files
why3/examples/coma/rev_append.coma
2024-08-08 11:09:46 +02:00

27 lines
706 B
Plaintext

use int.Int
use list.List
use list.Append
use list.Reverse
use coma.Std
use coma.List
-------------------------------------------------------------------------------
let assign_int < 'a > (&r v: 'a) (out [r] {r = v}) = any
let assign_list < 'a > (&r v: list 'a) {} (out [r] {r = v})
= [ &r <- v ] out
-------------------------------------------------------------------------------
let rev_append < 'a > (l0 r0: list 'a) {}
(out (r: list 'a) { r = reverse l0 ++ r0 })
= loop
[ loop { reverse l ++ r = reverse l0 ++ r0 }
= unList < 'a > {l}
(fun (h: 'a) (t: list 'a) ->
[ &r <- Cons h r | &l <- t ] loop)
(-> out {r}) ]
[ &r: list 'a = r0 | &l: list 'a = l0 ]