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}.

(* Specifications: *)
Lemma deduction_subst1: forall Phi x y, Phi |-- x -> Phi;; x |-- y -> Phi |-- y.
Lemma derivable_trans: forall (Phi Psi: context) y, (forall x, Psi x -> Phi |-- x) -> Psi |-- y -> Phi |-- y.
Lemma deduction_weaken1: forall Phi x y,
Phi |-- y ->
Phi;; x |-- y.
Lemma derivable_assum1: forall (Phi: context) (x: expr), Phi;; x |-- x.
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.
Lemma deduction_weaken0 {SC: NormalSequentCalculus L Gamma}: forall Phi y,
|-- y ->
Phi |-- y.