Skip to Content.
Sympa Menu

coq-club - [Coq-Club] generalize ZifyClasses.Saturate

coq-club AT inria.fr

Subject: The Coq mailing list

List archive

[Coq-Club] generalize ZifyClasses.Saturate


Chronological Thread 
  • From: Abhishek Anand <aa755 AT pm.me>
  • To: coq-club <coq-club AT inria.fr>
  • Subject: [Coq-Club] generalize ZifyClasses.Saturate
  • Date: Wed, 22 Jun 2022 02:09:32 +0000
  • Authentication-results: mail3-smtp-sop.national.inria.fr; spf=None smtp.pra=aa755 AT pm.me; spf=Pass smtp.mailfrom=aa755 AT pm.me; spf=Pass smtp.helo=postmaster AT mail-40134.protonmail.ch
  • Feedback-id: 39498114:user:proton
  • Ironport-data: A9a23:4fO/nahFA3DuK1MhARnvlOBKX161gBYKZh0ujC45NGQN5FlHY01je htvDW2DbPqCZ2fweI0nbN/nph9SucCGzoBiGwpl/CAyHy1jpJueD7x1DG+gZnLIdpWroGFPt phFNIGYdKjYaleG+39B55C49SEUOZmgH+a6UKieUsxIbVcMpB0J0HqPoMZkxN8y6TSFK1nV4 4mq/ZeFYAbNNwNcawr41YrT8HuDg9yp4Fv0jnRmDRyclAK2e9E9VfrzFInpR5fKatE88t2SG 44v+IqEElbxpH/BPD8KfoHTKSXmSpaKVeSHZ+E/t6KK2nCurQRquko32WZ1hUp/0120c95NJ Npln4ayZQdxGZL3s7oNQiFbAzNyD/0d5+qSSZS/mZT7I0zudnLtx7AyVBhtYcsA4OFrBmdL/ P0cbjsNBvyBr7vmnfTkEq8w3oJ6d5WD0IA34hmMyRnQBKl7HLjbRuPP6Le02R9p2ZwVTK+PP aL1bxJyRRbcZTFAAm0zDYIgmfyUgFjaKTtH/Qf9Sa0fuDSDl1IggdABKuH9cduTAM5Rg0ywv XPD522/AxcANdXZxyDtz563rurGnCe+BNpLT+H+7uRtnFqVw2USDFsdVTNXvMVVlGaUQdBzK xQzxREF87gjzE+7XNXPD0an9SvsUgEnZ/JcFOgz6Qeow6XS4hqECmVsctKnQIJ/3CPRbWJzv mJlj+8FFhQz7+TJFSP1GqO8/WrvZHB9wXoqPHdcJTbp9eUPt6kYrnryojtLFae0ipipQWirn 3aSti8igLMWhM8Pka67lbwmv95OjseRJuLWzl+NNo5A0u+fTNL7D2BPwQSFhcus1K7DEjG8U IEswqByFtwmA5CXjzCqS+4QBryv7PvtGGSC3AM/RMd7rWvwpiPLkWVsDNdWeh4B3iEsJ2aBX aMvkVo5CGJ7ZiDyMcebnaroV5xCIVfc+STNDayENYQfM/CdhSef5iZyYkjY1m+FraTfuf9XB HtvSu71VSxyIf0+lFKeHr5BuZd2mHxW7T6NFPjTkkT2uZLDNSX9YepUYDOmMLtjhIva+1q9z jqqH5DXo/mpeLaiOXa/HE96BQxiEEXX8rio8JcKJ7bdflUO9aNII6a5/I7NsrdNx8x9/tokN FnkMqOB4Fag13DBNyuQbXVvNOHmUZpl8CAjOGopMA/wiXQkZI+u6oYZdoc2JON7pLA/lKAuF /RVKd+dBvlvSyjc/2hPZ5fKqoE/Jg+gghiDPnb4bTVmJ8xgSgXF98XKZAzq8CVSXCO7udFj8 aWlkAbWGMJRSwNnBcfQSfSu01Lo5yRNxL4rARGQL4AKKkv28YVsJyjgtdMNIpkBeUfZ2z+X9 weKGhNE9+PDlIk4rYvSjqeeoob1TuZzExMBTWnW5Lq7LxPX5m6y3YhEXLradDzRTj6m4KDkY OgMl6PwN/gOnVBrtYtgEu8xkfJiu4Kx/edXnlZ+AXHGT1W3Ebc8cHOI6s9C6/9WzbhDtArqB 0+C94UIObiNP8+5QlcdKBB/MraG3PAQ32WKtK9pZl3g4zNw+r+OUEEUNBnV0H5RK758MYUEx +Y9uZdNtFPg0UZ2ao6L3nJO6mCBDn0cSKF55JsUN4/cjFZ5wF91Z5GBWDT954uCaokXP0R2c CWYgrHO2+ZVykbYKSZhEHHM2a8B3c1V5FZS1lgeIFKMk9vBwPQ3hUUD/TMyRwVT7xNGz+MqY Tc0aBYpef3W8mc6ntVHUkCtBxpFWk+T9Hvx/F1VxmfXeE+lCz7WJ2onNOfRp00U/gqwpNSAE G10FYokbdrrQC019i47WEog96S6FoA37hfFhMehGs2EG98xYVIJR4ewMHEQpUKP7dwZ3SX6S StCpY6cqpEX8QYIpus+BuF2EJwOHQucKjUqre5Jpcs08KK1RN128SCLbUW8Ei+Iyzom7mfgY /FTyglzu9hSGcpAQv33xULBHlOsoMMU2Q==
  • Ironport-hdrordr: A9a23:se6brKlQxP12S/bLFlTbxXROSiPpDfIz3DAbv31ZSRFFG/Fw9v re/sjzsCWftN9/YhodcK+7WJVoLUmxyXcX2/hzAV7BZmjbUQKTRelfBO3ZrAEIcBeRygcy78 pdT5Q=
  • Ironport-phdr: A9a23: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 ZaC0Y+zzqR/kvkzDl5EURrqmpPwDfE=
  • Ironport-sdr: d4UK4DUgs6gv7C7CQ8MZZIf2k4oSLGGuxspZlHDOpgm7reGKoVDgYYCDhBgdqmnojq+zEQQKYI SmF5840OisnvdPUL4JrK3HXW8tpCLjZM8lNtZbC4RXf2/q8mCJHGcG6zhJMxwHwif9P5XUCmr+ +wRCI40OtW1fXLUdSY4qgqj6lOK1NYAxWT4hNUr5FZbMNvYZcH2eGDEhRYMcuxx2i7UnKQIkhX LElXRcV7+UOcdqSM6Gs9OxNSASBlQUEaeHUgMfUY9c2V9wEIfDzl6QzuEKC4N+VpiPaBz1mYsc Q0T8/TfvRvuulY5ECZL/zWGO

How difficult would it be to generalize the Saturate class to capture relationships between the function result and the function arguments?
Such functionality is often needed to write properties of nonlinear functions that lia doesn't understand:

Zmod_le : ∀ a b : Z, 0 < b → 0 <= a → a mod b <= a
mod_pos_bound : ∀ a b : Z, 0 < b → 0 <= a mod b < b

Here is the existing definition of Saturate:
Class Saturate {T: Type} (Op : T -> T -> T) :=
  mksat {
      (** Given [Op x y],
          - [PArg1] is the pre-condition of x
          - [PArg2] is the pre-condition of y
          - [PRes]  is the pos-condition of (Op x y) *)
      PArg1 : T -> Prop;
      PArg2 : T -> Prop;
      PRes  : T -> Prop;
      (** [SatOk] states the correctness of the reasoning *)
      SatOk : forall x y, PArg1 x -> PArg2 y -> PRes (Op x y)
    }.

Clearly, for Zmod_le, the conclusion mentions not just the result (a mod b) but also `a`. One way to solve this to generalize PRes to be ternary. Then we wont even need PArg1 and PArg2:


Class Saturate {T: Type} (Op : T -> T -> T) :=
  mksat {
      PRes  : T ->T ->T -> Prop;
      (** [SatOk] states the correctness of the reasoning *)
      SatOk : forall x y, PRes x y (Op x y)
    }.

Would it be more difficult to implement saturation for instances of the above version?

--
Abhishek Anand



Archive powered by MHonArc 2.6.19+.

Top of Page