1 (**************************************************************************)
4 (* ||A|| A project by Andrea Asperti *)
6 (* ||I|| Developers: *)
7 (* ||T|| The HELM team. *)
8 (* ||A|| http://helm.cs.unibo.it *)
10 (* \ / This file is distributed under the terms of the *)
11 (* v GNU General Public License Version 2 *)
13 (**************************************************************************)
15 set "baseuri" "cic:/matita/SK/".
17 include "legacy/coq.ma".
19 alias id "nat" = "cic:/Coq/Init/Datatypes/nat.ind#xpointer(1/1)".
20 alias id "eq" = "cic:/Coq/Init/Logic/eq.ind#xpointer(1/1)".
21 alias id "eq_ind" = "cic:/Coq/Init/Logic/eq_ind.con".
22 alias id "eq_ind_r" = "cic:/Coq/Init/Logic/eq_ind_r.con".
23 alias id "sym_eq" = "cic:/Coq/Init/Logic/sym_eq.con".
25 definition bool_algebra \def
29 \lambda add: A \to A \to A.
30 \lambda mult: A \to A \to A.
32 (\forall x:A. (add x (inv x)) = one)\land
33 (\forall x:A. (mult x (inv x)) = zero)\land
34 (\forall x:A. (mult x one) = x)\land
35 (\forall x:A. (add x zero) = x)\land
36 (\forall x,y,z:A.(mult x (add y z)) = (add (mult x y) (mult x z)))\land
37 (\forall x,y,z:A.(add x (mult y z)) = (mult (add x y) (add x z)))\land
38 (\forall x,y:A.(mult x y) = (mult y x))\land
39 (\forall x,y:A.(add x y) = (add y x)).
44 \forall app: A \to A \to A.
47 \forall H1: (\forall x,y:A.(app (app K x) y) = x).
48 \forall H2: (\forall x,y,z:A.
49 (app (app (app S x) y) z) = (app (app x z) (app y z))).
51 (app (app (app S K) K) x) = x.
52 intros.auto paramodulation.
59 \forall add,mult: A \to A \to A.
61 \forall H: bool_algebra A one zero add mult inv.
64 unfold bool_algebra in H.
73 \forall add,mult: A \to A \to A.
75 \forall H: bool_algebra A one zero add mult inv.
76 \forall x:A. (mult x zero) = zero.
78 unfold bool_algebra in H.
87 \forall add,mult: A \to A \to A.
89 \forall H: bool_algebra A one zero add mult inv.
90 \forall x:A. (inv (inv x)) = x.
92 unfold bool_algebra in H.
101 \forall add,mult: A \to A \to A.
102 \forall inv: A \to A.
103 \forall H: bool_algebra A one zero add mult inv.
104 \forall x,y:A. (mult x (add (inv x) y)) = (mult x y).
106 unfold bool_algebra in H.
115 \forall add,mult: A \to A \to A.
116 \forall inv: A \to A.
117 \forall H: bool_algebra A one zero add mult inv.
118 \forall x,y:A. zero = (mult x (mult (inv x) y)).
120 unfold bool_algebra in H.
129 \forall add,mult: A \to A \to A.
130 \forall inv: A \to A.
131 \forall H: bool_algebra A one zero add mult inv.
132 \forall x,y:A. zero = mult (inv x) (mult x y).
134 unfold bool_algebra in H.
143 \forall add,mult: A \to A \to A.
144 \forall inv: A \to A.
145 \forall H: bool_algebra A one zero add mult inv.
146 \forall x,y:A. x = (mult (add y x) x).
148 unfold bool_algebra in H.
157 \forall add,mult: A \to A \to A.
158 \forall inv: A \to A.
159 \forall H: bool_algebra A one zero add mult inv.
160 \forall x,y:A. zero = (mult (inv (add x y)) y).
162 unfold bool_algebra in H.
171 \forall add,mult: A \to A \to A.
172 \forall inv: A \to A.
173 \forall H: bool_algebra A one zero add mult inv.
174 \forall x,y:A. (add (inv x) (mult y x)) = (add (inv x) y).
176 unfold bool_algebra in H.
185 \forall add,mult: A \to A \to A.
186 \forall inv: A \to A.
187 \forall H: bool_algebra A one zero add mult inv.
189 inv x = (add (inv x) (inv (add y x))).
191 unfold bool_algebra in H.
200 \forall add,mult: A \to A \to A.
201 \forall inv: A \to A.
202 \forall H: bool_algebra A one zero add mult inv.
204 inv x = (add (inv (add y x)) (inv x)).
206 unfold bool_algebra in H.
215 \forall add,mult: A \to A \to A.
216 \forall inv: A \to A.
217 \forall H: bool_algebra A one zero add mult inv.
219 add x (mult x y) = mult x (add x y).
221 unfold bool_algebra in H.
230 \forall add,mult: A \to A \to A.
231 \forall inv: A \to A.
232 \forall H: bool_algebra A one zero add mult inv.
234 (mult (add x y) (add z (add x u))) = (add (mult (add x y) z) (add x (mult y u))).
236 unfold bool_algebra in H.
245 \forall add,mult: A \to A \to A.
246 \forall inv: A \to A.
247 \forall H: bool_algebra A one zero add mult inv.
249 add x (mult y z) = mult (add y x) (add x z).
251 unfold bool_algebra in H.
257 theorem bool756minimal:
259 \forall add: A \to A \to A.
260 \forall mult: A \to A \to A.
261 \forall c1:(\forall x,y:A.(add x y) = (add y x)).
262 \forall hint1: (\forall x,y,z,u:A.
263 add y (add x (mult x u)) = (add (mult (add x y) z) (add x (mult y u)))).
264 \forall hint2: (\forall x,y:A. x = (mult (add y x) x)).
266 add x (add y (mult y z)) = add x (add y (mult x z)).
272 theorem bool756simplified:
274 \forall add: A \to A \to A.
275 \forall mult: A \to A \to A.
276 \forall c1:(\forall x,y:A.(add x y) = (add y x)).
277 \forall c2:(\forall x,y:A.(mult x y) = (mult y x)).
278 \forall hint1: (\forall x,y,z,u:A.
279 (mult (add x y) (add z (add x u))) = (add (mult (add x y) z) (add x (mult y u)))).
280 \forall hint2: (\forall x,y:A. x = (mult (add y x) x)).
281 \forall hint3: (\forall x,y,z:A.
282 add x (mult y z) = mult (add y x) (add x z)).
283 \forall hint4: (\forall x,y:A.
284 add x (mult x y) = mult x (add x y)).
286 add x (add y (mult y z)) = add x (add y (mult x z)).
296 \forall add: A \to A \to A.
297 \forall mult: A \to A \to A.
298 \forall inv: A \to A.
299 \forall c1:(\forall x,y:A.(add x y) = (add y x)).
300 \forall c2:(\forall x,y:A.(mult x y) = (mult y x)).
301 \forall d1: (\forall x,y,z:A.
302 (add x (mult y z)) = (mult (add x y) (add x z))).
303 \forall d2: (\forall x,y,z:A.
304 (mult x (add y z)) = (add (mult x y) (mult x z))).
305 \forall i1: (\forall x:A. (add x zero) = x).
306 \forall i2: (\forall x:A. (mult x one) = x).
307 \forall inv1: (\forall x:A. (add x (inv x)) = one).
308 \forall inv2: (\forall x:A. (mult x (inv x)) = zero).
309 \forall hint1: (\forall x,y,z,u:A.
310 (mult (add x y) (add z (add x u))) = (add (mult (add x y) z) (add x (mult y u)))).
311 \forall hint2: (\forall x,y:A. x = (mult (add y x) x)).
312 \forall hint3: (\forall x,y,z:A.
313 add x (mult y z) = mult (add y x) (add x z)).
314 \forall hint4: (\forall x,y:A.
315 add x (mult x y) = mult x (add x y)).
317 add x y = add x (add y (mult x z)).
319 cut (mult (add y x) (add x (add y z)) = add x (add y (mult x z)));
321 |auto paramodulation]
328 \forall add,mult: A \to A \to A.
329 \forall inv: A \to A.
330 \forall H: bool_algebra A one zero add mult inv.
332 add x y = add x (add y (mult x z)).
334 unfold bool_algebra in H.
343 \forall add,mult: A \to A \to A.
344 \forall inv: A \to A.
345 \forall H: bool_algebra A one zero add mult inv.
347 (add x y) = (add (add x (mult y z)) y).
349 unfold bool_algebra in H.
358 \forall add,mult: A \to A \to A.
359 \forall inv: A \to A.
360 \forall H: bool_algebra A one zero add mult inv.
364 \forall add: A \to A \to A.
365 \forall mult: A \to A \to A.
366 \forall inv: A \to A.
367 \forall c1:(\forall x,y:A.(add x y) = (add y x)).
368 \forall c2:(\forall x,y:A.(mult x y) = (mult y x)).
369 \forall d1: (\forall x,y,z:A.
370 (add x (mult y z)) = (mult (add x y) (add x z))).
371 \forall d2: (\forall x,y,z:A.
372 (mult x (add y z)) = (add (mult x y) (mult x z))).
373 \forall i1: (\forall x:A. (add x zero) = x).
374 \forall i2: (\forall x:A. (mult x one) = x).
375 \forall inv1: (\forall x:A. (add x (inv x)) = one).
376 \forall inv2: (\forall x:A. (mult x (inv x)) = zero).
378 \forall c1z: (\forall x:A.(add x z) = (add z x)).
379 add (add x y) z = add (add x y) (add z y).
388 \forall add,mult: A \to A \to A.
389 \forall inv: A \to A.
390 \forall H: bool_algebra A one zero add mult inv.
392 add (add x y) z = add (add x y) (add z y).
394 unfold bool_algebra in H.
403 \forall add,mult: A \to A \to A.
404 \forall inv: A \to A.
405 \forall H: bool_algebra A one zero add mult inv.
407 add x (add y z) = add (add x z) y.
409 unfold bool_algebra in H.
418 \forall add,mult: A \to A \to A.
419 \forall inv: A \to A.
420 \forall H: bool_algebra A one zero add mult inv.
422 add (inv x) y = add (mult x y) (inv x).
424 unfold bool_algebra in H.
434 \forall add: A \to A \to A.
435 \forall mult: A \to A \to A.
436 \forall inv: A \to A.
437 \forall c1:(\forall x,y:A.(add x y) = (add y x)).
438 \forall c2:(\forall x,y:A.(mult x y) = (mult y x)).
439 \forall d1: (\forall x,y,z:A.
440 (add x (mult y z)) = (mult (add x y) (add x z))).
441 \forall d2: (\forall x,y,z:A.
442 (mult x (add y z)) = (add (mult x y) (mult x z))).
443 \forall i1: (\forall x:A. (add x zero) = x).
444 \forall i2: (\forall x:A. (mult x one) = x).
445 \forall inv1: (\forall x:A. (add x (inv x)) = one).
446 \forall inv2: (\forall x:A. (mult x (inv x)) = zero).
447 \forall hint1731:(\forall x,y:A. add (inv (add x y)) y = add y (inv x)).
448 \forall hint1735:(\forall x,y:A. add (inv (add x y)) x = add x (inv y)).
449 \forall hint623:(\forall x,y:A. inv (mult x y) = add (inv x) (inv (mult x y))).
451 (inv (mult x y)) = (add (inv x) (inv y)).
461 \forall add: A \to A \to A.
462 \forall mult: A \to A \to A.
463 \forall inv: A \to A.
464 \forall c1:(\forall x,y:A.(add x y) = (add y x)).
465 \forall c2:(\forall x,y:A.(mult x y) = (mult y x)).
466 \forall d1: (\forall x,y,z:A.
467 (add x (mult y z)) = (mult (add x y) (add x z))).
468 \forall d2: (\forall x,y,z:A.
469 (mult x (add y z)) = (add (mult x y) (mult x z))).
470 \forall i1: (\forall x:A. (add x zero) = x).
471 \forall i2: (\forall x:A. (mult x one) = x).
472 \forall inv1: (\forall x:A. (add x (inv x)) = one).
473 \forall inv2: (\forall x:A. (mult x (inv x)) = zero).
474 \forall hint1731:(\forall x,y:A. add (inv (add x y)) y = add y (inv x)).
475 \forall hint623:(\forall x,y:A. inv (mult x y) = add (inv x) (inv (mult x y))).
477 (inv (mult x y)) = (add (inv x) (inv y)).
487 \forall add: A \to A \to A.
488 \forall mult: A \to A \to A.
489 \forall inv: A \to A.
490 \forall c1:(\forall x,y:A.(add x y) = (add y x)).
491 \forall c2:(\forall x,y:A.(mult x y) = (mult y x)).
492 \forall d1: (\forall x,y,z:A.
493 (add x (mult y z)) = (mult (add x y) (add x z))).
494 \forall d2: (\forall x,y,z:A.
495 (mult x (add y z)) = (add (mult x y) (mult x z))).
496 \forall i1: (\forall x:A. (add x zero) = x).
497 \forall i2: (\forall x:A. (mult x one) = x).
498 \forall inv1: (\forall x:A. (add x (inv x)) = one).
499 \forall inv2: (\forall x:A. (mult x (inv x)) = zero).
500 \forall hint1731:(\forall x,y:A. add (inv (add x y)) y = add y (inv x)).
501 \forall hint609:(\forall x,y:A. inv x = add (inv (add y x)) (inv x)).
503 (inv (mult x y)) = (add (inv x) (inv y)).
511 \forall add,mult: A \to A \to A.
512 \forall inv: A \to A.
513 \forall H: bool_algebra A one zero add mult inv.
515 (inv (mult x y)) = (add (inv x) (inv y)).
517 unfold bool_algebra in H.