Merge branch 'upgrade-altergo-2.6.0' into 'master'
[why3.git] / tests / test-poly.why
blob002994ca444734732b424a23085b084ac2b32cf3
3 theory Mono
5 goal g0 : 2 = 3
7 use int.Int
9 goal g : 2+2 = 5
12 (* bin/why3prove.byte tests/test-poly.why --debug detect_poly -a detect_polymorphism -D why3 -T Mono -G g *)
15 end
18 theory MonoType
20 type t = A | B
22 goal g0 : A <> B
24 goal g1 : forall x. x = A \/ x = B
26 type u = C | D t
28 goal g2 : forall x y. y = D x
30 type a = E | F b
31 with b = G | H a
33 goal g3 : forall x. x <> F (H x)
35 type v = I (p:t) | J (p:t) u
37 constant x : v
39 goal g4 : match x with I y -> y=A | J y (D z) -> z=A | J B z -> z=C | J A C -> true end
41 goal g5 : match x with I y -> y | J y _ -> y end = A
43 (* bin/why3prove.byte tests/test-poly.why --debug detect_poly -a detect_polymorphism -D why3 -T MonoType -G g0 *)
45 end
48 theory PolyType
50 type t 'a = A 'a
52 goal g: forall x y:'a. A x = A y
54 (* bin/why3prove.byte tests/test-poly.why --debug detect_poly -a detect_polymorphism -D why3 -T PolyType -G g *)
56 end
59 theory TestList
61 use list.List
63 goal g : match Cons 42 Nil with Nil -> false | Cons x _ -> x=42 end
65 end
68 theory MonoSymb
70 function id (x:int) : int = x
72 goal g: forall x:int. id x = x
74 (* bin/why3prove.byte tests/test-poly.why --debug detect_poly -a detect_polymorphism -D why3 -T PolySymb -G g *)
76 end
78 theory PolySymb
80 function id (x:'a) : 'a = x
82 meta "encoding:ignore_polymorphism_ls" function id
84 goal g: forall x:int. id x = x
86 (* bin/why3prove.byte tests/test-poly.why --debug detect_poly -a detect_polymorphism -D why3 -T PolySymb -G g *)
88 end
90 theory PolyProp
92 goal g: forall x:'a. x = x
94 (* bin/why3prove.byte tests/test-poly.why --debug detect_poly -a detect_polymorphism -D why3 -T PolyProp -G g *)
96 end
99 theory Map
101   use int.Int
102   use map.Map
104   goal g: forall m:map int int.
105     let m' = m[0<-42][1<-42] in
106     m'[0] + m'[1] >= 0
108 (* bin/why3prove.byte tests/test-poly.why --debug detect_poly -D why3_smt -T Map -G g *)
113 theory TestBool
115   use bool.Bool
117   goal g : forall b:bool.  b = b
121 bin/why3prove tests/test-poly.why -D why3_smt -T TestBool -G g
128 theory TestTuple
130   use int.Int
131   use bool.Bool
133   type t = (int,bool)
135   goal g: forall x:t. match x with (a,b) -> a >= 0 /\ b end