import Erdos1135.KrasikovLagarias.ChunkedEncoding
import Erdos1135.KrasikovLagarias.RealCertificate

namespace Erdos1135
namespace KrasikovLagarias

def k18Gamma901EncodedWeightHexChunks : Array String := #[
  include_str "../../../artifacts/kl_predecessor/k18_g901_1000/raw.000.hex",
  include_str "../../../artifacts/kl_predecessor/k18_g901_1000/raw.001.hex",
  include_str "../../../artifacts/kl_predecessor/k18_g901_1000/raw.002.hex",
  include_str "../../../artifacts/kl_predecessor/k18_g901_1000/raw.003.hex",
  include_str "../../../artifacts/kl_predecessor/k18_g901_1000/raw.004.hex",
  include_str "../../../artifacts/kl_predecessor/k18_g901_1000/raw.005.hex",
  include_str "../../../artifacts/kl_predecessor/k18_g901_1000/raw.006.hex",
  include_str "../../../artifacts/kl_predecessor/k18_g901_1000/raw.007.hex",
  include_str "../../../artifacts/kl_predecessor/k18_g901_1000/raw.008.hex",
  include_str "../../../artifacts/kl_predecessor/k18_g901_1000/raw.009.hex",
  include_str "../../../artifacts/kl_predecessor/k18_g901_1000/raw.010.hex",
  include_str "../../../artifacts/kl_predecessor/k18_g901_1000/raw.011.hex",
  include_str "../../../artifacts/kl_predecessor/k18_g901_1000/raw.012.hex",
  include_str "../../../artifacts/kl_predecessor/k18_g901_1000/raw.013.hex",
  include_str "../../../artifacts/kl_predecessor/k18_g901_1000/raw.014.hex",
  include_str "../../../artifacts/kl_predecessor/k18_g901_1000/raw.015.hex"
]

def k18Gamma901EncodedCertificate : FiniteCertificate where
  k := 18
  gammaNum := 901
  gammaDen := 1000
  coefficients := {
    scale := 268435456
    lambdaNeg2 := 76981049
    lambdaAlphaMinus2 := 207142911
    lambdaAlphaMinus1 := 386810365
  }
  weights := decodeU32LEHexChunks k18Gamma901EncodedWeightHexChunks

theorem k18Gamma901EncodedEncodingValid :
    u32HexChunksEncodingValid k18Gamma901EncodedWeightHexChunks
      129140163 = true := by
  native_decide

theorem k18Gamma901EncodedCertificate_check :
    k18Gamma901EncodedCertificate.check = true := by
  native_decide

theorem k18Gamma901EncodedCertificate_valid :
    k18Gamma901EncodedCertificate.Valid :=
  FiniteCertificate.valid_of_check k18Gamma901EncodedCertificate_check

theorem k18Gamma901EncodedCertificate_realRowValid {index : Nat}
    (hindex : index < k18Gamma901EncodedCertificate.principalCount) :
    k18Gamma901EncodedCertificate.RealRowValid
      (realCoefficients k18Gamma901EncodedCertificate.gammaNum
        k18Gamma901EncodedCertificate.gammaDen) index :=
  k18Gamma901EncodedCertificate_valid.klRealRowValid hindex

end KrasikovLagarias
end Erdos1135
