Merge branch 'fix_another_sessions' into 'master'
[why3.git] / tests / test-claude.why
blob118d765866cb14fd28c86a9ecc09a3b2215a9216
1 (*
3 Require Import Why3.
4 Ltac ae := why3 "alt-ergo" timelimit 3.
7 *)
9 theory TestProp
11   goal Test0 : true
13   goal Test0_5 : true -> false
15   predicate a
17   predicate b
19   goal Test1: a /\ b -> a
21 end
23 theory TestInt
25    use int.Int
27    goal Test1: 2+2 = 4
29    goal Test2: forall x:int. x*x >= 0
31    goal Test3: 1<>0
33    goal Test4: 1=2 -> 3=4
35    goal Test5: forall x:int. x <> 0 -> x*x > 0
37    goal Test6: 2+3 = 5 /\ (forall x:int. x*x >= 0)
39    goal Test7: 0 = 2 /\ 2 = 3 /\ 4 = 5 /\ 6 = 7
41    goal Test8: 2+2=4 /\ 3+3=6
43    axiom A : 1 = 2
45    goal Test9: 2+2=5 /\ 3+3=8
47 end
49 theory TestSplit
51   predicate aa int
53   predicate bb int
55   goal G1 : (aa 5) /\ ("stop_split" aa 0 /\ bb 6) /\ ("stop_split" aa 1 /\ bb 2)
57   goal G2 : ("stop_split" aa 0 && bb 1) && ("stop_split" aa 1 && bb 2)
59   goal G3 : forall x:int. ("stop_split" aa x /\ bb 1) /\ ("stop_split" aa 1 /\ bb 2)
61   goal G4 : forall x:int. ("stop_split" aa x && bb 1) && ("stop_split" aa 1 && bb 2)
63   use int.Int
65   goal Glet : (let x = 1 in x+1 = 2) /\ (let y = 3 in y+2 = 4)
67 end
69 theory TestMinMax
71   use int.Int
72   use int.MinMax
74   goal G1: min 1 2 = 1
76 end
78 theory TestDiv
80    use int.Int
81    use int.EuclideanDivision
83    goal EDiv1: EuclideanDivision.div 1 2 = 0
85    goal EDiv2: EuclideanDivision.div (-1) 2 = -1
87    use int.ComputerDivision
89    goal CDiv1: ComputerDivision.div 1 2 = 0
91    goal CDiv2: ComputerDivision.div (-1) 2 = 0
93 end
95 theory TestList
97   use int.Int
98   use list.List
100   function x : list int
102   goal Test1:
103      match x with
104      | Nil -> 1 = 0 /\ 2 = 3
105      | Cons _ Nil -> 4 = 5 /\ 6 = 7
106      | Cons _ _ -> 8 = 9 /\ 10 = 11
107      end
112 theory TestReal
114    use real.Real
116    goal Real1: forall x:real. x <> 0.0 -> x*x <> 0.0
118    use real.Abs
120    goal RealAbs1: forall x:real. 100.0 >= abs x >= 1.0 -> x*x >= 1.0
122    goal T: forall x y:real. abs x <= 1.0 /\ abs y <= 1.0 -> x - y <= 2.0
126 theory TestFloat
128    use floating_point.Rounding
129    use floating_point.Single
131    lemma Round_single_01: Single.round NearestTiesToEven 0.1 = 0x0.199999Ap0
135 theory TestIntros
137   use int.Int
139   goal G :
140     forall x y : int. x > 0 /\ y > 0 ->
141       (exists z t:int. x + t = y + z) -> x > y
143   goal G2 :
144     forall x y : int. (x > 0 /\ y > 0) /\ (x < 10 /\ y < 10) ->
145       (exists x' y':int. x + x' = y + y') -> x > y
148   type t 'a 'b
150   goal G3 :
151     forall x y: t 'a 'b, z z': t int 'c. z = z' -> x = y
154   axiom A: exists x. x * 6 = 42
156   goal g: false
161 theory TestRealize
163   type t
165   predicate p t t
167   axiom P_arefl: forall x:t. not (p x x)
169   axiom P_total: forall x y:t. p x y \/ p y x \/ x=y
171   function f t : t
173   axiom A : forall x:t. p (f x) x
175   lemma B : forall x:t. not (p x (f x))
179 theory TestRealizeUse
181   use TestRealize
183   function q t : t
185   axiom C : forall x:t. p (q x) x
189 theory TestRealizeUseInt
191   use int.Int
193   function q int : int
195   axiom C : forall x:int. q x + x >= 0
199 theory TestInline
201   use int.Int
203   goal T : 1 = 2
205   predicate p (x:int) (y:int) = x <= 3 /\ y <= 7
207   goal G : p 4 4
211 theory TestInductive
213 use int.Int
215 inductive p (x:int) =
217   | C0 : forall x:int. p x -> p x
218 (* NonPositiveIndDecl
219   | C1 : forall x:int.
220      (if p x then true else false) -> p x
222   | C2 : let x=0 in p x
225 theory TestWarnings
227   type t
229   lemma L1 : forall x:t. true
231   lemma L2 : exists x:t. x=x -> false
235 theory TestPVSRealAbs
237   use int.Abs
238   use real.RealInfix
239   use import real.Abs as A
241   lemma l: A.abs (-. 1.0) = 1.0
245 theory TestTransform
247  predicate a int
248  predicate b int
250  lemma L: a 1 /\ b 2