Definition rtacP := sigT (fun tac: rtac typ (expr typ func) =>
forall tbl: SymEnv.functions RType_typ, rtac_sound (Expr_expr := func_defs.Expr_expr_fs tbl) tac).
(************************************************  Rtac Part  ************************************************)
Definition my_lemma := lemma typ (ExprCore.expr typ func) (ExprCore.expr typ func).
Definition THEN' (r1 r2 : rtac typ (expr typ func)) := THEN r1 (runOnGoals r2).
Definition THEN (r1 r2 : rtac typ (expr typ func)) :=
THEN' r1 (THEN' (INSTANTIATE typ func) r2).
Section tbled.
Variable tbl : SymEnv.functions RType_typ.
Let RSym_sym := RSym_sym tbl.
Existing Instance RSym_sym.
Let Expr_expr_fs := Expr_expr_fs tbl.
Existing Instance Expr_expr_fs.
Let Expr_ok_fs := Expr_ok_fs tbl.
Existing Instance Expr_ok_fs.
Let ExprVar_expr := @ExprVariables.ExprVar_expr typ func.
Existing Instance ExprVar_expr.
Existing Instance MA.
Instance MentionsAnyOk : MentionsAnyOk MA _ _.
Admitted.

(* Specifications: *)
Lemma THEN_sound : forall t1 t2,
rtac_sound (Expr_expr := func_defs.Expr_expr_fs tbl) t1 -> rtac_sound (Expr_expr := func_defs.Expr_expr_fs tbl) t2 -> rtac_sound (Expr_expr := func_defs.Expr_expr_fs tbl) (THEN t1 t2).