Ltac intros_dep :=
  match goal with
  | |- ?G => change (OpaqueProp G); simple apply ready_for_intros
  end;
  repeat
    match goal with
    | |-  OpaqueProp (Typeclass_Rewrite _ -> OpaqueProp _) => fail 1
    | _ => apply intro_with_record; intro
    end.Ltac schedule :=
  match goal with
  | |- OpaqueProp (Typeclass_Rewrite ?L -> _) => constr: (L)
  end.Ltac tactic_rev_rec L1 L2 :=
  match L1 with
  | nil => L2
  | cons ?H ?L => tactic_rev_rec L (cons H L2)
  end.Ltac tactic_rev L :=
  match type of L with
  | list ?T => tactic_rev_rec L constr:(@nil T)
  end.

(* Specifications: *)
Lemma change_schedule: forall (l l': list (sig (fun X: Prop => X))) (G: Prop), OpaqueProp (Typeclass_Rewrite l -> G) -> OpaqueProp (Typeclass_Rewrite l' -> G).
Lemma pop_schedule: forall (x: (sig (fun X: Prop => X))) (l: list (sig (fun X: Prop => X))) (G: Prop), OpaqueProp (Typeclass_Rewrite l -> G) -> OpaqueProp (Typeclass_Rewrite (x :: l) -> G).
Lemma push_schedule: forall (x: (sig (fun X: Prop => X))) (l: list (sig (fun X: Prop => X))) (G: Prop), OpaqueProp (Typeclass_Rewrite (x :: l) -> G) -> OpaqueProp (Typeclass_Rewrite l -> G).