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.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 _____).