from __future__ import annotations

from collections.abc import Callable, Mapping

from . import System
from .lemmas import (
    Proof,
    prove_id,
    prove_notnot,
    prove_notnotr,
    prove_a1i,
    prove_a2i,
    prove_mpd,
    prove_syl,
    prove_sylcom,
    prove_com12,
    prove_syl5,
    prove_syl6,
    prove_a1d,
    prove_idd,
    prove_a1i13,
    prove_2a1d,
    prove_2a1,
    prove_a2d,
    prove_syl5com,
    prove_syl11,
    prove_syl56,
    prove_syl6com,
    prove_mpcom,
    prove_syli,
    prove_syl2im,
    prove_syl2imc,
    prove_pm2_27,
    prove_mpdd,
    prove_mpid,
    prove_con1,
    prove_con1d,
    prove_con2,
    prove_con2d,
    prove_con3,
    prove_con3d,
    prove_con4,
    prove_con4d,
    prove_conax1,
    prove_pm2_21,
    prove_pm2_21d,
    prove_pm2_24,
    prove_pm2_43,
    prove_pm2_18,
    prove_pm2_18d,
    prove_pm2_521,
    prove_pm2_521g,
    prove_mt2,
    prove_mt3,
    prove_mt4d,
    prove_nsyl,
    prove_nsyl2,
    prove_nsyl3,
    prove_pm2_61,
    prove_pm2_65,
    prove_imim1,
    prove_imim2,
    prove_ja,
    prove_simplim,
    prove_con1i,
    prove_con2i,
    prove_con3i,
    prove_con4i,
    prove_jarli,
)


LemmaCtor = Callable[[System], Proof]


SETMM_TO_HILBERT_LEMMAS: Mapping[str, LemmaCtor] = {
    "id": prove_id,
    "notnot": prove_notnot,
    "notnotr": prove_notnotr,
    "a1i": prove_a1i,
    "a2i": prove_a2i,
    "mpd": prove_mpd,
    "syl": prove_syl,
    "sylcom": prove_sylcom,
    "com12": prove_com12,
    "syl5": prove_syl5,
    "syl6": prove_syl6,
    "a1d": prove_a1d,
    "idd": prove_idd,
    "a1i13": prove_a1i13,
    "2a1d": prove_2a1d,
    "2a1": prove_2a1,
    "a2d": prove_a2d,
    "syl5com": prove_syl5com,
    "syl11": prove_syl11,
    "syl56": prove_syl56,
    "syl6com": prove_syl6com,
    "mpcom": prove_mpcom,
    "syli": prove_syli,
    "syl2im": prove_syl2im,
    "syl2imc": prove_syl2imc,
    "pm2.27": prove_pm2_27,
    "mpdd": prove_mpdd,
    "mpid": prove_mpid,
    "con1": prove_con1,
    "con1d": prove_con1d,
    "con2": prove_con2,
    "con2d": prove_con2d,
    "con3": prove_con3,
    "con3d": prove_con3d,
    "con4": prove_con4,
    "con4d": prove_con4d,
    "conax1": prove_conax1,
    "pm2.21": prove_pm2_21,
    "pm2.21d": prove_pm2_21d,
    "pm2.24": prove_pm2_24,
    "pm2.43": prove_pm2_43,
    "pm2.18": prove_pm2_18,
    "pm2.18d": prove_pm2_18d,
    "pm2.521": prove_pm2_521,
    "pm2.521g": prove_pm2_521g,
    "mt2": prove_mt2,
    "mt3": prove_mt3,
    "mt4d": prove_mt4d,
    "nsyl": prove_nsyl,
    "nsyl2": prove_nsyl2,
    "nsyl3": prove_nsyl3,
    "pm2.61": prove_pm2_61,
    "pm2.65": prove_pm2_65,
    "imim1": prove_imim1,
    "imim2": prove_imim2,
    "ja": prove_ja,
    "simplim": prove_simplim,
    "con1i": prove_con1i,
    "con2i": prove_con2i,
    "con3i": prove_con3i,
    "con4i": prove_con4i,
    "jarli": prove_jarli,
}


__all__ = ["LemmaCtor", "SETMM_TO_HILBERT_LEMMAS"]
