fis sessions
[why3.git] / examples / coma / rev_append.coma
blob0ec21cf6cb38fb252acf1d23b5c9fff3a9c00e9d
1 use int.Int
2 use list.List
3 use list.Append
4 use list.Reverse
6 use coma.Std
7 use coma.List
9 -------------------------------------------------------------------------------
11 let assign_int < 'a > (&r v: 'a) (out [r] {r = v}) = any
13 let assign_list < 'a > (&r v: list 'a) {} (out [r] {r = v})
14   = [ &r <- v ] out
16 -------------------------------------------------------------------------------
18 let rev_append < 'a > (l0 r0: list 'a) {}
19       (out (r: list 'a) { r = reverse l0 ++ r0 })
20 = loop
21   [ loop { reverse l ++ r = reverse l0 ++ r0 }
22     = unList < 'a > {l}
23         (fun (h: 'a) (t: list 'a) ->
24           [ &r <- Cons h r | &l <- t ] loop)
25         (-> out {r}) ]
26   [ &r: list 'a = r0 | &l: list 'a = l0 ]