Local Open Scope logic_base.
Class NormalSequentCalculus (L: Language) (Gamma: ProofTheory L): Type := {
provable_derivable: forall x, provable x <-> derivable empty_context x
}.
Class BasicSequentCalculus (L: Language) (Gamma: ProofTheory L) := {
deduction_weaken: forall Phi Psi x, Included _ Phi Psi -> Phi |-- x -> Psi |-- x;
derivable_assum: forall Phi x, Ensembles.In _ Phi x -> Phi |-- x;
deduction_subst: forall (Phi Psi: context) y, (forall x, Psi x -> Phi |-- x) -> Union _ Phi Psi |-- y -> Phi |-- y
}.
Class FiniteWitnessedSequentCalculus (L: Language) (Gamma: ProofTheory L) := {
derivable_finite_witnessed: forall (Phi: context) (y: expr), Phi |-- y -> exists xs, Forall Phi xs /\ (fun x => In x xs) |-- y
}.
Section DerivableRulesFromSequentCalculus.
Context {L: Language}
{Gamma: ProofTheory L}
{bSC: BasicSequentCalculus L Gamma}.

Lemma contextual_derivable_finite_witnessed {fwSC: FiniteWitnessedSequentCalculus L Gamma}: forall (Phi Psi: context) (y: expr), Union _ Phi Psi |-- y -> exists xs, Forall Psi xs /\ Union _ Phi (fun x => In x xs) |-- y.