+
+(* adds a symmetry step *)
+let symmetric pred eq eq_ty l id uri m =
+ let pred =
+ Cic.Lambda (Cic.Name "Sym",eq_ty,
+ Cic.Appl [CicSubstitution.lift 1 eq ;
+ CicSubstitution.lift 1 eq_ty;
+ Cic.Rel 1;CicSubstitution.lift 1 l])
+ in
+ let prefl =
+ Equality.Exact (Cic.Appl
+ [Cic.MutConstruct(uri,0,1,[]);eq_ty;l])
+ in
+ let id1 =
+ let eq = Equality.mk_equality (0,prefl,(eq_ty,l,l,Eq),m) in
+ let (_,_,_,_,id) = Equality.open_equality eq in
+ id
+ in
+ Equality.Step(Subst.empty_subst,
+ (Equality.Demodulation,id1,(Utils.Left,id),pred))
+;;