coq-club AT inria.fr
Subject: The Coq mailing list
List archive
- 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?
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)
}.
Would it be more difficult to implement saturation for instances of the above version?
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;
mksat {
PRes : T ->T ->T -> Prop;
(** [SatOk] states the correctness of the reasoning *)
SatOk : forall x y, PRes x y (Op x y)
}.
SatOk : forall x y, PRes x y (Op x y)
}.
--
Abhishek Anand
- [Coq-Club] generalize ZifyClasses.Saturate, Abhishek Anand, 06/22/2022
- Re: [Coq-Club] generalize ZifyClasses.Saturate, Frédéric Besson, 06/22/2022
Archive powered by MHonArc 2.6.19+.