Definition Build_AxiomaticProofTheory {L: Language} {minL: MinimunLanguage L} (Provable: expr -> Prop): ProofTheory L :=
Build_ProofTheory L Provable
(fun Phi y => exists xs, Forall (fun x => Phi x) xs /\ Provable (multi_imp xs y)).
Definition Build_AxiomaticProofTheory_AX {L: Language} {minL: MinimunLanguage L} (Provable: expr -> Prop): NormalAxiomatization L (Build_AxiomaticProofTheory Provable) :=
Build_NormalAxiomatization L minL (Build_AxiomaticProofTheory Provable) (fun _ _ => iff_refl _).
Definition Build_SequentCalculus {L: Language} (Derivable: context -> expr -> Prop): ProofTheory L :=
Build_ProofTheory L (fun x => Derivable (Empty_set _) x) Derivable.
Definition Build_SequentCalculus_SC {L: Language} (Derivable: context -> expr -> Prop): NormalSequentCalculus L (Build_SequentCalculus Derivable) :=
Build_NormalSequentCalculus L (Build_SequentCalculus Derivable) (fun _ => iff_refl _).
Inductive Typeclass_Rewrite (l: list (sig (fun X: Prop => X))): Prop :=
| Typeclass_Rewrite_I : Typeclass_Rewrite l.
Definition OpaqueProp (P: Prop): Prop := P.
Ltac revert_dep_rec T :=
match goal with
| H: context [T] |- _ =>
first [ revert H | revert_dep_rec H]; revert_dep_rec T
| _ => idtac
end.
Ltac revert_dep Gamma :=
match goal with
| |- ?G => change (OpaqueProp G)
end;
revert_dep_rec Gamma.

(* Specifications: *)
Lemma ready_for_intros: forall G: Prop, OpaqueProp (Typeclass_Rewrite nil -> G) -> OpaqueProp G.
Lemma intro_with_record: forall (l: list (sig (fun X: Prop => X))) (P: Prop) (G: P -> Prop),
(forall _____: P, OpaqueProp (Typeclass_Rewrite ((exist (fun X: Prop => X) P _____) :: l) -> G _____)) ->
OpaqueProp (Typeclass_Rewrite l -> forall _____: P, G _____).