set "baseuri" "cic:/matita/tests/coercions/".
include "nat/compare.ma".
-include "datatypes/bool.ma".
+include "nat/times.ma".
inductive pos: Set \def
| one : pos
\def
\lambda f:int \to int. \lambda x : pos .f (nat2int (pos2nat x)).
+(* This used to test eq_f as a coercion. However, posing both eq_f and sym_eq
+ as coercions made the qed time of some TPTP problems reach infty.
+ Thus eq_f is no longer a coercion (nor is sym_eq).
theorem coercion_svelta : \forall T,S:Type.\forall f:T \to S.\forall x,y:T.x=y \to f y = f x.
intros.
apply ((\lambda h:f y = f x.h) H).
qed.
+*)
variant pos2nat' : ? \def pos2nat.
definition church: nat \to nat \to nat \def times.
coercion cic:/matita/tests/coercions/church.con 1.
+lemma foo0 : ∀n:nat. n n = n * n.
+intros; reflexivity;
+qed.
+lemma foo01 : ∀n:nat. n n n = n * n * n.
+intros; reflexivity;
+qed.
definition mapmult: \forall n:nat.\forall l:listn nat n. nat \to nat \to nat \def
- \lambda n:nat.\lambda l:listn nat n.\lambda m,o:nat.l m o.
+ \lambda n:nat.\lambda l:listn nat n.\lambda m,o:nat.
+ l (m m) o (o o o).
+
+lemma foo : ∀n:nat. n n n n n n = n * n * n * n * n * n.
+intros; reflexivity;
+qed.
+
+axiom f : nat → nat.
+
+lemma foo1 : ∀n:nat. f n n = f n * n.
+
+axiom T0 : Type.
+axiom T1 : Type.
+axiom T2 : Type.
+axiom T3 : Type.
+
+axiom c1 : T0 -> T1.
+axiom c2 : T1 -> T2.
+axiom c3 : T2 -> T3.
+axiom c4 : T2 -> T1.
+
+coercion cic:/matita/tests/coercions/c1.con.
+coercion cic:/matita/tests/coercions/c2.con.
+coercion cic:/matita/tests/coercions/c3.con.
+coercion cic:/matita/tests/coercions/c4.con.
+
+