-(**************************************************************************)
-(* ___ *)
-(* ||M|| *)
-(* ||A|| A project by Andrea Asperti *)
-(* ||T|| *)
-(* ||I|| Developers: *)
-(* ||T|| The HELM team. *)
-(* ||A|| http://helm.cs.unibo.it *)
-(* \ / *)
-(* \ / This file is distributed under the terms of the *)
-(* v GNU General Public License Version 2 *)
-(* *)
-(**************************************************************************)
+
+(*
+axiom A : Type.
+axiom B : Type.
+axiom B1 : Type.
+axiom C : Type.
+
+axiom f1 : A → B.
+axiom f2 : A → B1.
+axiom f3 : B → C.
+axiom f4 : B1 → C.
+
+coercion f1.
+coercion f2.
+coercion f3.
+coercion f4.
+
+
+
+
+axiom P : Prop.
+
+lemma x : P.
+*)
include "logic/equality.ma".
record L : Type \def {
- l_c :> Prop;
+ l_c : Prop;
l_op : l_c \to l_c \to l_c
}.
record R : Type \def {
- r_c :> Prop;
+ r_c : Prop;
r_op : r_c \to r_c \to r_c
}.
lemma lr_R : LR_ \to R.
intros;constructor 1;
-[apply rule (lr_L l)
+[apply rule (l_c (lr_L l))
|rewrite < (lr_w l);apply (r_op (lr_R_ l));]
qed.
+(*
+axiom F : Prop → Prop.
+axiom C : Prop → Prop.
+
+axiom daemon : ∀x.F x = C x.
+
+lemma xxx : ∀x.F x = C x. apply daemon; qed.
+
+axiom yyyy : ∀x.C (C x) = C (C x) → F (F x) = F (F x).
+
+coercion yyyy.
+
+lemma x : ∀x. (λy:F (F x) = F (F x).True) (refl_eq ? (C (C x))).
+
+include "nat/factorial.ma".
+lemma xxx : 8! = 8 * 7!. intros; reflexivity; qed.
+
+lemma x : (λy:8!=8!.True) (refl_eq ? (8 * 7!)).
+apply (refl_eq ??);
+*)
+
+(*
lemma xxx : \forall x. r_c (lr_R x) = l_c (lr_L x).
intros; reflexivity;
qed.
+*)
-coercion lr_L.
+definition Prop_OR_LR_1 : LR_ → Prop.
+apply (λx.r_c (lr_R x)).
+qed.
+(*
+coercion Prop_OR_LR_1.
coercion lr_R.
+*)
+
+unification hint (\forall x. r_c (lr_R x) = l_c (lr_L x)).
lemma foo : \forall x,y.l_op ? x (r_op ? x y) = x.