6 constant f : int -> int = (\x:int.x+1)
12 constant compose : ('b -> 'c) -> ('a -> 'b) -> ('a -> 'c) =
13 (\f:'b->'c.(\g:'a->'b.(\x:'a.f (g x))))
15 goal g2: compose f f 42 = a
17 constant h : int -> int
21 meta "rewrite" prop a1
43 axiom a : forall x:t. f x = True <-> r x
57 goal g2: true /\ false
61 goal g10: if true then 1=1 else 3=4
63 goal g11: let x=1 in x=1
81 meta "rewrite" prop g4
87 meta "rewrite" prop Power_0
88 (* not a rule: conditional
89 meta "rewrite" prop Power_s
91 goal k1: power 4 3 = 64
105 use int.ComputerDivision
107 goal m1: div 0 1 = 42
108 goal m2: div n 1 = 42
109 goal m3: div 0 n = 42
110 goal m4: div n n = 42
115 goal n2: max n n = 42
116 goal n3: min n n = 42
122 axiom a42 : f 42 + 43 = 56
124 meta rewrite prop a42
126 goal o1 : f (6*7) + (42 + 1) = n
136 goal i1: let x = { f = 4 } in x.f < 5
138 goal i2: let x = { f = 4 } in
139 match x with { f = y } -> y + 1 > 3 end
151 constant l1 : list int = Cons 12 (Cons 34 (Cons 56 Nil))
153 goal g1: match l1 with Nil -> 0 | Cons x _ -> x end = 12
157 goal g2: length l1 = 3
161 meta "rewrite" prop hd_cons
162 meta "rewrite" prop tl_cons
168 constant l2 : list int =
169 Cons 12 (Cons 34 (Cons 56 Nil)) ++ Cons 78 (Cons 90 Nil)
173 goal h2: length l2 = 5
175 goal h3: forall x y:int. Cons x Nil = Cons y Nil
177 constant l3 : list int
179 axiom dangerous: Cons 12 Nil = l3
181 meta rewrite prop dangerous
183 goal i1: l3 = Nil ++ Nil
204 meta "rewrite" prop a1
210 axiom a2 : f b b = g b
212 meta "rewrite" prop a2
217 axiom a3 : forall x:t. f (h x) a = g x
219 meta "rewrite" prop a3
223 axiom a4 : forall x y:t. i x y = f x y
225 meta "rewrite" prop a4
229 axiom a5 : forall x:t. j x x = x
231 meta "rewrite" prop a5
241 goal g01 : f (g (g a)) u = f a (g a)
245 goal g03 : f (f b b) (g b) = f u (f b b)
247 goal g04 : f (h u) a = f (h a) a
262 function ( * ) t t : t
268 axiom assoc : forall x y z:t. (x * y) * z = x * (y * z)
270 meta "rewrite" prop assoc
272 axiom id_left : forall x:t. e * x = x
274 meta "rewrite" prop id_left
276 axiom inv_left : forall x:t. i x * x = e
278 meta "rewrite" prop inv_left
284 goal g0: (a * b) * c = e
286 goal g01: (a * e) * c = a * c
288 goal g1: (b * i a) * a = b
290 goal g2: ((b * i a) * a) * a = b * a
303 axiom a: f c = f (f c)
305 meta "rewrite" prop a
313 function plus (n m:nat) : nat =
316 | S k -> S (plus k m)
319 function fib (n:nat) : nat =
323 | S (S n as m) -> plus (fib n) (fib m)
328 goal g3 : fib (S (S (S O))) = x
329 goal g4 : fib (S (S (S (S O)))) = x
330 goal g5 : fib (S (S (S (S (S O))))) = x
331 goal g6 : fib (S (S (S (S (S (S O)))))) = x
332 goal g7 : fib (S (S (S (S (S (S (S O))))))) = x
334 meta "compute_max_steps" 100000
336 goal g8 : fib (S (S (S (S (S (S (S (S O)))))))) = x
337 goal g9 : fib (S (S (S (S (S (S (S (S (S O))))))))) = x
338 goal g10 : fib (S (S (S (S (S (S (S (S (S (S O)))))))))) = x
346 goal g1 : forall y. 2+2 = y
348 goal g2 : forall y. 0 + y + 0 + y - y = y
350 lemma l1 : forall x y z:int. (x + y) + z = z + (y + x)
354 goal g3 : (f 1 + f 2) + f 3 = f 4
362 predicate f1 (y:int) = y > 0 /\ true
364 goal g1 : true /\ false
366 predicate f2 (y:int) = y + 0 >= 1
368 function f3 (y:int) : int = y + 0
381 meta "rewrite" prop mem_empty
383 meta "rewrite" prop add_def1
385 meta "rewrite" prop union_def1
393 type t = A | B | C | D
395 goal g00 : mem A empty
398 goal g01 : mem A (add B empty)
400 goal g015 : mem A (singleton B)
403 goal g02 : mem A (union (add B empty) (add C empty))
405 goal g025 : mem A (union (singleton B) (singleton C))
417 axiom A : forall x:t. a = x
419 meta "rewrite" prop A