File: bug_18151.v

package info (click to toggle)
coq 8.20.1%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, trixie
  • size: 44,116 kB
  • sloc: ml: 234,160; sh: 4,301; python: 3,270; ansic: 2,644; makefile: 882; lisp: 172; javascript: 63; xml: 24; sed: 2
file content (43 lines) | stat: -rw-r--r-- 1,212 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
Require Import Coq.ZArith.BinInt.
From Coq Require Import Zify ZifyClasses.
Import Z.
Open Scope Z_scope.

#[global] Instance sat_mod_le : ZifyClasses.Saturate BinIntDef.Z.modulo :=
  {|
    ZifyClasses.PArg1 := fun a => 0 <= a;
    ZifyClasses.PArg2 := fun b => 0 < b;
    ZifyClasses.PRes := fun a b ab => ab <= a;
    ZifyClasses.SatOk := mod_le
  |}.
Add Zify Saturate sat_mod_le.

Lemma shiftr_lbound a n:
   0 <= a -> True -> 0 <= (Z.shiftr a n).
Proof. now intros; apply Z.shiftr_nonneg. Qed.

#[global] Instance sat_shiftr_lbound : ZifyClasses.Saturate BinIntDef.Z.shiftr :=
  {|
    ZifyClasses.PArg1 := fun a => 0 <= a;
    ZifyClasses.PArg2 := fun b => True;
    ZifyClasses.PRes := fun a b ab => 0 <= ab;
    ZifyClasses.SatOk := shiftr_lbound
  |}.
Add Zify Saturate sat_shiftr_lbound.

Axiom TODO: forall {P}, P.

Goal forall x4 x5 t0 : N,
 0 <= of_N x4 <= 18446744073709551615 ->
 land
   (shiftr (of_N x4) (of_N t0) mod 2 ^ of_N (Npos 64))
   (shiftl 1 (of_N x5) - 1) =
 land (shiftr (of_N x4) (of_N t0))
   (shiftl 1 (of_N x5) - 1).
Proof.
  intros.
  zify.
  apply TODO.
Qed.
(* Qed used to fail with the following error before #18152.
Error: No such section variable or assumption: __sat6. *)