(* M. Dummett. A propositional calculus with denumerable matrix. J. Symbolic Logic, 24(2):97–106, 1959. *)
(* K. G¨odel. On the intuitionistic propositional calculus. In S. Feferman, J. W. D. Jr, S. C. Kleene, G. H. Moore, R. M. Solovay, and J. van Heijenoort, editors, Collected Works, volume 1. Oxford University Press, 1986. *)
Local Open Scope logic_base.
Local Open Scope syntax.
Class GodelDummettPropositionalLogic (L: Language) {minL: MinimunLanguage L} {pL: PropositionalLanguage L} (Gamma: ProofTheory L) {minAX: MinimunAxiomatization L Gamma} {ipGamma: IntuitionisticPropositionalLogic L Gamma} := {
impp_choice: forall x y, |-- (x --> y) || (y --> x)
}.

(* Specifications: *)
Lemma MakeSequentCalculus_GodelDummettPropositionalLogic {L: Language} {minL: MinimunLanguage L} {pL: PropositionalLanguage L} {Gamma: ProofTheory L} {minAX: MinimunAxiomatization L Gamma} (minAX': MinimunAxiomatization L (Build_AxiomaticProofTheory (@provable L Gamma))) (ipGamma: IntuitionisticPropositionalLogic L Gamma) {ipGamma': IntuitionisticPropositionalLogic L (Build_AxiomaticProofTheory (@provable L Gamma))} {gdpGamma: GodelDummettPropositionalLogic L Gamma}:
Typeclass_Rewrite (exist (fun X: Prop => X) (IntuitionisticPropositionalLogic L (Build_AxiomaticProofTheory (@provable L Gamma))) ipGamma' :: nil) ->
forall (G: Prop) (l: list (sig (fun X: Prop => X))),
(forall
(gdpGamma: GodelDummettPropositionalLogic L (Build_AxiomaticProofTheory (@provable L Gamma))),
OpaqueProp (Typeclass_Rewrite l -> G)) <->
OpaqueProp (Typeclass_Rewrite ((exist (fun X: Prop => X) (GodelDummettPropositionalLogic L Gamma) gdpGamma) :: l) -> G).