aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorthery2007-06-19 14:42:10 +0000
committerthery2007-06-19 14:42:10 +0000
commitcd79ade8b8c69781da03630b7e0b1733a18dbd6d (patch)
tree5cceb4174ee58345dcb5991098961acc4d579a2b
parentbdb10644ba3f905e274c98b73a5ba35d121b6a37 (diff)
Adding function is_even, safe_shiftl, safe_shiftr
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@9894 85f007b7-540e-0410-9357-904b9bb8a0f7
-rw-r--r--theories/Ints/num/NMake.v886
-rw-r--r--theories/Ints/num/genN.ml153
2 files changed, 791 insertions, 248 deletions
diff --git a/theories/Ints/num/NMake.v b/theories/Ints/num/NMake.v
index 0b5e722953..be35b5fea1 100644
--- a/theories/Ints/num/NMake.v
+++ b/theories/Ints/num/NMake.v
@@ -6,8 +6,6 @@ Require Import Nbasic.
Require Import GenMul.
Require Import GenDivn1.
-
-
Module Type W0Type.
Parameter w : Set.
Parameter w_op : znz_op w.
@@ -248,6 +246,21 @@ Module Make (W0:W0Type).
Definition w11_eq0 := w11_op.(znz_eq0).
Definition w12_eq0 := w12_op.(znz_eq0).
+ Definition w0_0W := w0_op.(znz_0W).
+ Definition w1_0W := w1_op.(znz_0W).
+ Definition w2_0W := w2_op.(znz_0W).
+ Definition w3_0W := w3_op.(znz_0W).
+ Definition w4_0W := w4_op.(znz_0W).
+ Definition w5_0W := w5_op.(znz_0W).
+ Definition w6_0W := w6_op.(znz_0W).
+ Definition w7_0W := w7_op.(znz_0W).
+ Definition w8_0W := w8_op.(znz_0W).
+ Definition w9_0W := w9_op.(znz_0W).
+ Definition w10_0W := w10_op.(znz_0W).
+ Definition w11_0W := w11_op.(znz_0W).
+ Definition w12_0W := w12_op.(znz_0W).
+
+ Definition w0_WW := w0_op.(znz_WW).
Definition w0_add_c := w0_op.(znz_add_c).
Definition w1_add_c := w1_op.(znz_add_c).
@@ -1361,31 +1374,31 @@ Module Make (W0:W0Type).
@w_mul_add w12 W0 w12_succ w12_add_c w12_mul_c.
Definition w0_mul_add_n1 :=
- @gen_mul_add_n1 w0 w_0 w0_op.(znz_WW) w0_op.(znz_0W) w0_mul_add.
+ @gen_mul_add_n1 w0 w_0 w0_op.(znz_WW) w0_0W w0_mul_add.
Definition w1_mul_add_n1 :=
- @gen_mul_add_n1 w1 W0 w1_op.(znz_WW) w1_op.(znz_0W) w1_mul_add.
+ @gen_mul_add_n1 w1 W0 w1_op.(znz_WW) w1_0W w1_mul_add.
Definition w2_mul_add_n1 :=
- @gen_mul_add_n1 w2 W0 w2_op.(znz_WW) w2_op.(znz_0W) w2_mul_add.
+ @gen_mul_add_n1 w2 W0 w2_op.(znz_WW) w2_0W w2_mul_add.
Definition w3_mul_add_n1 :=
- @gen_mul_add_n1 w3 W0 w3_op.(znz_WW) w3_op.(znz_0W) w3_mul_add.
+ @gen_mul_add_n1 w3 W0 w3_op.(znz_WW) w3_0W w3_mul_add.
Definition w4_mul_add_n1 :=
- @gen_mul_add_n1 w4 W0 w4_op.(znz_WW) w4_op.(znz_0W) w4_mul_add.
+ @gen_mul_add_n1 w4 W0 w4_op.(znz_WW) w4_0W w4_mul_add.
Definition w5_mul_add_n1 :=
- @gen_mul_add_n1 w5 W0 w5_op.(znz_WW) w5_op.(znz_0W) w5_mul_add.
+ @gen_mul_add_n1 w5 W0 w5_op.(znz_WW) w5_0W w5_mul_add.
Definition w6_mul_add_n1 :=
- @gen_mul_add_n1 w6 W0 w6_op.(znz_WW) w6_op.(znz_0W) w6_mul_add.
+ @gen_mul_add_n1 w6 W0 w6_op.(znz_WW) w6_0W w6_mul_add.
Definition w7_mul_add_n1 :=
- @gen_mul_add_n1 w7 W0 w7_op.(znz_WW) w7_op.(znz_0W) w7_mul_add.
+ @gen_mul_add_n1 w7 W0 w7_op.(znz_WW) w7_0W w7_mul_add.
Definition w8_mul_add_n1 :=
- @gen_mul_add_n1 w8 W0 w8_op.(znz_WW) w8_op.(znz_0W) w8_mul_add.
+ @gen_mul_add_n1 w8 W0 w8_op.(znz_WW) w8_0W w8_mul_add.
Definition w9_mul_add_n1 :=
- @gen_mul_add_n1 w9 W0 w9_op.(znz_WW) w9_op.(znz_0W) w9_mul_add.
+ @gen_mul_add_n1 w9 W0 w9_op.(znz_WW) w9_0W w9_mul_add.
Definition w10_mul_add_n1 :=
- @gen_mul_add_n1 w10 W0 w10_op.(znz_WW) w10_op.(znz_0W) w10_mul_add.
+ @gen_mul_add_n1 w10 W0 w10_op.(znz_WW) w10_0W w10_mul_add.
Definition w11_mul_add_n1 :=
- @gen_mul_add_n1 w11 W0 w11_op.(znz_WW) w11_op.(znz_0W) w11_mul_add.
+ @gen_mul_add_n1 w11 W0 w11_op.(znz_WW) w11_0W w11_mul_add.
Definition w12_mul_add_n1 :=
- @gen_mul_add_n1 w12 W0 w12_op.(znz_WW) w12_op.(znz_0W) w12_mul_add.
+ @gen_mul_add_n1 w12 W0 w12_op.(znz_WW) w12_0W w12_mul_add.
Definition mul x y :=
match x, y with
@@ -1466,12 +1479,9 @@ Module Make (W0:W0Type).
| N0 wx, Nn n wy =>
if w0_eq0 wx then zero
else
- let (w,r) :=
- gen_mul_add_mn1 w_0 (fun r => extend11 w0 (WW w_0 r))
- w12_op.(znz_0W) w12_op.(znz_WW)
- (w0_mul_add_n1 12) (S n) wy wx w_0 in
- if w0_eq0 w then Nn n r
- else Nn (S n) (WW (extend n w12 (extend12 w0 (WW w_0 w))) r)
+ let (w,r) := w12_mul_add_n1 (S n) wy (extend11 w0 (WW w_0 wx)) W0 in
+ if w12_eq0 w then Nn n r
+ else Nn (S n) (WW (extend n w12 (WW W0 w)) r)
| N1 wx, N0 wy =>
if w0_eq0 wy then zero
else
@@ -1525,12 +1535,9 @@ Module Make (W0:W0Type).
if w1_eq0 w then N12 r
else Nn 0 (WW (extend11 w0 w) r)
| N1 wx, Nn n wy =>
- let (w,r) :=
- gen_mul_add_mn1 W0 (fun r => extend11 w0 r)
- w12_op.(znz_0W) w12_op.(znz_WW)
- (w1_mul_add_n1 11) (S n) wy wx W0 in
- if w1_eq0 w then Nn n r
- else Nn (S n) (WW (extend n w12 (extend12 w0 w)) r)
+ let (w,r) := w12_mul_add_n1 (S n) wy (extend11 w0 wx) W0 in
+ if w12_eq0 w then Nn n r
+ else Nn (S n) (WW (extend n w12 (WW W0 w)) r)
| N2 wx, N0 wy =>
if w0_eq0 wy then zero
else
@@ -2150,19 +2157,13 @@ Module Make (W0:W0Type).
| Nn n wx, N0 wy =>
if w0_eq0 wy then zero
else
- let (w,r) :=
- gen_mul_add_mn1 w_0 (fun r => extend11 w0 (WW w_0 r))
- w12_op.(znz_0W) w12_op.(znz_WW)
- (w0_mul_add_n1 12) (S n) wx wy w_0 in
- if w0_eq0 w then Nn n r
- else Nn (S n) (WW (extend n w12 (extend12 w0 (WW w_0 w))) r)
- | Nn n wx, N1 wy =>
- let (w,r) :=
- gen_mul_add_mn1 W0 (fun r => extend11 w0 r)
- w12_op.(znz_0W) w12_op.(znz_WW)
- (w1_mul_add_n1 11) (S n) wx wy W0 in
- if w1_eq0 w then Nn n r
- else Nn (S n) (WW (extend n w12 (extend12 w0 w)) r)
+ let (w,r) := w12_mul_add_n1 (S n) wx (extend11 w0 (WW w_0 wy)) W0 in
+ if w12_eq0 w then Nn n r
+ else Nn (S n) (WW (extend n w12 (WW W0 w)) r)
+ | Nn n wx, N1 wy =>
+ let (w,r) := w12_mul_add_n1 (S n) wx (extend11 w0 wy) W0 in
+ if w12_eq0 w then Nn n r
+ else Nn (S n) (WW (extend n w12 (WW W0 w)) r)
| Nn n wx, N2 wy =>
let (w,r) := w12_mul_add_n1 (S n) wx (extend10 w1 wy) W0 in
if w12_eq0 w then Nn n r
@@ -2377,152 +2378,152 @@ Module Make (W0:W0Type).
match x, y with
| N0 wx, N0 wy => let (q, r):= w0_div_gt wx wy in (reduce_0 q, reduce_0 r)
| N0 wx, N1 wy =>
- let wx':= GenBase.extend w0_op.(znz_0W) 0 wx in
+ let wx':= GenBase.extend w0_0W 0 wx in
let (q, r):= w1_div_gt wx' wy in
(reduce_1 q, reduce_1 r)
| N0 wx, N2 wy =>
- let wx':= GenBase.extend w0_op.(znz_0W) 1 wx in
+ let wx':= GenBase.extend w0_0W 1 wx in
let (q, r):= w2_div_gt wx' wy in
(reduce_2 q, reduce_2 r)
| N0 wx, N3 wy =>
- let wx':= GenBase.extend w0_op.(znz_0W) 2 wx in
+ let wx':= GenBase.extend w0_0W 2 wx in
let (q, r):= w3_div_gt wx' wy in
(reduce_3 q, reduce_3 r)
| N0 wx, N4 wy =>
- let wx':= GenBase.extend w0_op.(znz_0W) 3 wx in
+ let wx':= GenBase.extend w0_0W 3 wx in
let (q, r):= w4_div_gt wx' wy in
(reduce_4 q, reduce_4 r)
| N0 wx, N5 wy =>
- let wx':= GenBase.extend w0_op.(znz_0W) 4 wx in
+ let wx':= GenBase.extend w0_0W 4 wx in
let (q, r):= w5_div_gt wx' wy in
(reduce_5 q, reduce_5 r)
| N0 wx, N6 wy =>
- let wx':= GenBase.extend w0_op.(znz_0W) 5 wx in
+ let wx':= GenBase.extend w0_0W 5 wx in
let (q, r):= w6_div_gt wx' wy in
(reduce_6 q, reduce_6 r)
| N0 wx, N7 wy =>
- let wx':= GenBase.extend w0_op.(znz_0W) 6 wx in
+ let wx':= GenBase.extend w0_0W 6 wx in
let (q, r):= w7_div_gt wx' wy in
(reduce_7 q, reduce_7 r)
| N0 wx, N8 wy =>
- let wx':= GenBase.extend w0_op.(znz_0W) 7 wx in
+ let wx':= GenBase.extend w0_0W 7 wx in
let (q, r):= w8_div_gt wx' wy in
(reduce_8 q, reduce_8 r)
| N0 wx, N9 wy =>
- let wx':= GenBase.extend w0_op.(znz_0W) 8 wx in
+ let wx':= GenBase.extend w0_0W 8 wx in
let (q, r):= w9_div_gt wx' wy in
(reduce_9 q, reduce_9 r)
| N0 wx, N10 wy =>
- let wx':= GenBase.extend w0_op.(znz_0W) 9 wx in
+ let wx':= GenBase.extend w0_0W 9 wx in
let (q, r):= w10_div_gt wx' wy in
(reduce_10 q, reduce_10 r)
| N0 wx, N11 wy =>
- let wx':= GenBase.extend w0_op.(znz_0W) 10 wx in
+ let wx':= GenBase.extend w0_0W 10 wx in
let (q, r):= w11_div_gt wx' wy in
(reduce_11 q, reduce_11 r)
| N0 wx, N12 wy =>
- let wx':= GenBase.extend w0_op.(znz_0W) 11 wx in
+ let wx':= GenBase.extend w0_0W 11 wx in
let (q, r):= w12_div_gt wx' wy in
(reduce_12 q, reduce_12 r)
| N0 wx, Nn n wy =>
- let wx':= extend n w12 (GenBase.extend w0_op.(znz_0W) 12 wx) in
+ let wx':= extend n w12 (GenBase.extend w0_0W 12 wx) in
let (q, r):= (make_op n).(znz_div_gt) wx' wy in
(reduce_n n q, reduce_n n r)
| N1 wx, N0 wy => let (q, r):= w0_divn1 1 wx wy in (reduce_1 q, reduce_0 r)
| N1 wx, N1 wy => let (q, r):= w1_div_gt wx wy in (reduce_1 q, reduce_1 r)
| N1 wx, N2 wy =>
- let wx':= GenBase.extend w1_op.(znz_0W) 0 wx in
+ let wx':= GenBase.extend w1_0W 0 wx in
let (q, r):= w2_div_gt wx' wy in
(reduce_2 q, reduce_2 r)
| N1 wx, N3 wy =>
- let wx':= GenBase.extend w1_op.(znz_0W) 1 wx in
+ let wx':= GenBase.extend w1_0W 1 wx in
let (q, r):= w3_div_gt wx' wy in
(reduce_3 q, reduce_3 r)
| N1 wx, N4 wy =>
- let wx':= GenBase.extend w1_op.(znz_0W) 2 wx in
+ let wx':= GenBase.extend w1_0W 2 wx in
let (q, r):= w4_div_gt wx' wy in
(reduce_4 q, reduce_4 r)
| N1 wx, N5 wy =>
- let wx':= GenBase.extend w1_op.(znz_0W) 3 wx in
+ let wx':= GenBase.extend w1_0W 3 wx in
let (q, r):= w5_div_gt wx' wy in
(reduce_5 q, reduce_5 r)
| N1 wx, N6 wy =>
- let wx':= GenBase.extend w1_op.(znz_0W) 4 wx in
+ let wx':= GenBase.extend w1_0W 4 wx in
let (q, r):= w6_div_gt wx' wy in
(reduce_6 q, reduce_6 r)
| N1 wx, N7 wy =>
- let wx':= GenBase.extend w1_op.(znz_0W) 5 wx in
+ let wx':= GenBase.extend w1_0W 5 wx in
let (q, r):= w7_div_gt wx' wy in
(reduce_7 q, reduce_7 r)
| N1 wx, N8 wy =>
- let wx':= GenBase.extend w1_op.(znz_0W) 6 wx in
+ let wx':= GenBase.extend w1_0W 6 wx in
let (q, r):= w8_div_gt wx' wy in
(reduce_8 q, reduce_8 r)
| N1 wx, N9 wy =>
- let wx':= GenBase.extend w1_op.(znz_0W) 7 wx in
+ let wx':= GenBase.extend w1_0W 7 wx in
let (q, r):= w9_div_gt wx' wy in
(reduce_9 q, reduce_9 r)
| N1 wx, N10 wy =>
- let wx':= GenBase.extend w1_op.(znz_0W) 8 wx in
+ let wx':= GenBase.extend w1_0W 8 wx in
let (q, r):= w10_div_gt wx' wy in
(reduce_10 q, reduce_10 r)
| N1 wx, N11 wy =>
- let wx':= GenBase.extend w1_op.(znz_0W) 9 wx in
+ let wx':= GenBase.extend w1_0W 9 wx in
let (q, r):= w11_div_gt wx' wy in
(reduce_11 q, reduce_11 r)
| N1 wx, N12 wy =>
- let wx':= GenBase.extend w1_op.(znz_0W) 10 wx in
+ let wx':= GenBase.extend w1_0W 10 wx in
let (q, r):= w12_div_gt wx' wy in
(reduce_12 q, reduce_12 r)
| N1 wx, Nn n wy =>
- let wx':= extend n w12 (GenBase.extend w1_op.(znz_0W) 11 wx) in
+ let wx':= extend n w12 (GenBase.extend w1_0W 11 wx) in
let (q, r):= (make_op n).(znz_div_gt) wx' wy in
(reduce_n n q, reduce_n n r)
| N2 wx, N0 wy => let (q, r):= w0_divn1 2 wx wy in (reduce_2 q, reduce_0 r)
| N2 wx, N1 wy => let (q, r):= w1_divn1 1 wx wy in (reduce_2 q, reduce_1 r)
| N2 wx, N2 wy => let (q, r):= w2_div_gt wx wy in (reduce_2 q, reduce_2 r)
| N2 wx, N3 wy =>
- let wx':= GenBase.extend w2_op.(znz_0W) 0 wx in
+ let wx':= GenBase.extend w2_0W 0 wx in
let (q, r):= w3_div_gt wx' wy in
(reduce_3 q, reduce_3 r)
| N2 wx, N4 wy =>
- let wx':= GenBase.extend w2_op.(znz_0W) 1 wx in
+ let wx':= GenBase.extend w2_0W 1 wx in
let (q, r):= w4_div_gt wx' wy in
(reduce_4 q, reduce_4 r)
| N2 wx, N5 wy =>
- let wx':= GenBase.extend w2_op.(znz_0W) 2 wx in
+ let wx':= GenBase.extend w2_0W 2 wx in
let (q, r):= w5_div_gt wx' wy in
(reduce_5 q, reduce_5 r)
| N2 wx, N6 wy =>
- let wx':= GenBase.extend w2_op.(znz_0W) 3 wx in
+ let wx':= GenBase.extend w2_0W 3 wx in
let (q, r):= w6_div_gt wx' wy in
(reduce_6 q, reduce_6 r)
| N2 wx, N7 wy =>
- let wx':= GenBase.extend w2_op.(znz_0W) 4 wx in
+ let wx':= GenBase.extend w2_0W 4 wx in
let (q, r):= w7_div_gt wx' wy in
(reduce_7 q, reduce_7 r)
| N2 wx, N8 wy =>
- let wx':= GenBase.extend w2_op.(znz_0W) 5 wx in
+ let wx':= GenBase.extend w2_0W 5 wx in
let (q, r):= w8_div_gt wx' wy in
(reduce_8 q, reduce_8 r)
| N2 wx, N9 wy =>
- let wx':= GenBase.extend w2_op.(znz_0W) 6 wx in
+ let wx':= GenBase.extend w2_0W 6 wx in
let (q, r):= w9_div_gt wx' wy in
(reduce_9 q, reduce_9 r)
| N2 wx, N10 wy =>
- let wx':= GenBase.extend w2_op.(znz_0W) 7 wx in
+ let wx':= GenBase.extend w2_0W 7 wx in
let (q, r):= w10_div_gt wx' wy in
(reduce_10 q, reduce_10 r)
| N2 wx, N11 wy =>
- let wx':= GenBase.extend w2_op.(znz_0W) 8 wx in
+ let wx':= GenBase.extend w2_0W 8 wx in
let (q, r):= w11_div_gt wx' wy in
(reduce_11 q, reduce_11 r)
| N2 wx, N12 wy =>
- let wx':= GenBase.extend w2_op.(znz_0W) 9 wx in
+ let wx':= GenBase.extend w2_0W 9 wx in
let (q, r):= w12_div_gt wx' wy in
(reduce_12 q, reduce_12 r)
| N2 wx, Nn n wy =>
- let wx':= extend n w12 (GenBase.extend w2_op.(znz_0W) 10 wx) in
+ let wx':= extend n w12 (GenBase.extend w2_0W 10 wx) in
let (q, r):= (make_op n).(znz_div_gt) wx' wy in
(reduce_n n q, reduce_n n r)
| N3 wx, N0 wy => let (q, r):= w0_divn1 3 wx wy in (reduce_3 q, reduce_0 r)
@@ -2530,43 +2531,43 @@ Module Make (W0:W0Type).
| N3 wx, N2 wy => let (q, r):= w2_divn1 1 wx wy in (reduce_3 q, reduce_2 r)
| N3 wx, N3 wy => let (q, r):= w3_div_gt wx wy in (reduce_3 q, reduce_3 r)
| N3 wx, N4 wy =>
- let wx':= GenBase.extend w3_op.(znz_0W) 0 wx in
+ let wx':= GenBase.extend w3_0W 0 wx in
let (q, r):= w4_div_gt wx' wy in
(reduce_4 q, reduce_4 r)
| N3 wx, N5 wy =>
- let wx':= GenBase.extend w3_op.(znz_0W) 1 wx in
+ let wx':= GenBase.extend w3_0W 1 wx in
let (q, r):= w5_div_gt wx' wy in
(reduce_5 q, reduce_5 r)
| N3 wx, N6 wy =>
- let wx':= GenBase.extend w3_op.(znz_0W) 2 wx in
+ let wx':= GenBase.extend w3_0W 2 wx in
let (q, r):= w6_div_gt wx' wy in
(reduce_6 q, reduce_6 r)
| N3 wx, N7 wy =>
- let wx':= GenBase.extend w3_op.(znz_0W) 3 wx in
+ let wx':= GenBase.extend w3_0W 3 wx in
let (q, r):= w7_div_gt wx' wy in
(reduce_7 q, reduce_7 r)
| N3 wx, N8 wy =>
- let wx':= GenBase.extend w3_op.(znz_0W) 4 wx in
+ let wx':= GenBase.extend w3_0W 4 wx in
let (q, r):= w8_div_gt wx' wy in
(reduce_8 q, reduce_8 r)
| N3 wx, N9 wy =>
- let wx':= GenBase.extend w3_op.(znz_0W) 5 wx in
+ let wx':= GenBase.extend w3_0W 5 wx in
let (q, r):= w9_div_gt wx' wy in
(reduce_9 q, reduce_9 r)
| N3 wx, N10 wy =>
- let wx':= GenBase.extend w3_op.(znz_0W) 6 wx in
+ let wx':= GenBase.extend w3_0W 6 wx in
let (q, r):= w10_div_gt wx' wy in
(reduce_10 q, reduce_10 r)
| N3 wx, N11 wy =>
- let wx':= GenBase.extend w3_op.(znz_0W) 7 wx in
+ let wx':= GenBase.extend w3_0W 7 wx in
let (q, r):= w11_div_gt wx' wy in
(reduce_11 q, reduce_11 r)
| N3 wx, N12 wy =>
- let wx':= GenBase.extend w3_op.(znz_0W) 8 wx in
+ let wx':= GenBase.extend w3_0W 8 wx in
let (q, r):= w12_div_gt wx' wy in
(reduce_12 q, reduce_12 r)
| N3 wx, Nn n wy =>
- let wx':= extend n w12 (GenBase.extend w3_op.(znz_0W) 9 wx) in
+ let wx':= extend n w12 (GenBase.extend w3_0W 9 wx) in
let (q, r):= (make_op n).(znz_div_gt) wx' wy in
(reduce_n n q, reduce_n n r)
| N4 wx, N0 wy => let (q, r):= w0_divn1 4 wx wy in (reduce_4 q, reduce_0 r)
@@ -2575,39 +2576,39 @@ Module Make (W0:W0Type).
| N4 wx, N3 wy => let (q, r):= w3_divn1 1 wx wy in (reduce_4 q, reduce_3 r)
| N4 wx, N4 wy => let (q, r):= w4_div_gt wx wy in (reduce_4 q, reduce_4 r)
| N4 wx, N5 wy =>
- let wx':= GenBase.extend w4_op.(znz_0W) 0 wx in
+ let wx':= GenBase.extend w4_0W 0 wx in
let (q, r):= w5_div_gt wx' wy in
(reduce_5 q, reduce_5 r)
| N4 wx, N6 wy =>
- let wx':= GenBase.extend w4_op.(znz_0W) 1 wx in
+ let wx':= GenBase.extend w4_0W 1 wx in
let (q, r):= w6_div_gt wx' wy in
(reduce_6 q, reduce_6 r)
| N4 wx, N7 wy =>
- let wx':= GenBase.extend w4_op.(znz_0W) 2 wx in
+ let wx':= GenBase.extend w4_0W 2 wx in
let (q, r):= w7_div_gt wx' wy in
(reduce_7 q, reduce_7 r)
| N4 wx, N8 wy =>
- let wx':= GenBase.extend w4_op.(znz_0W) 3 wx in
+ let wx':= GenBase.extend w4_0W 3 wx in
let (q, r):= w8_div_gt wx' wy in
(reduce_8 q, reduce_8 r)
| N4 wx, N9 wy =>
- let wx':= GenBase.extend w4_op.(znz_0W) 4 wx in
+ let wx':= GenBase.extend w4_0W 4 wx in
let (q, r):= w9_div_gt wx' wy in
(reduce_9 q, reduce_9 r)
| N4 wx, N10 wy =>
- let wx':= GenBase.extend w4_op.(znz_0W) 5 wx in
+ let wx':= GenBase.extend w4_0W 5 wx in
let (q, r):= w10_div_gt wx' wy in
(reduce_10 q, reduce_10 r)
| N4 wx, N11 wy =>
- let wx':= GenBase.extend w4_op.(znz_0W) 6 wx in
+ let wx':= GenBase.extend w4_0W 6 wx in
let (q, r):= w11_div_gt wx' wy in
(reduce_11 q, reduce_11 r)
| N4 wx, N12 wy =>
- let wx':= GenBase.extend w4_op.(znz_0W) 7 wx in
+ let wx':= GenBase.extend w4_0W 7 wx in
let (q, r):= w12_div_gt wx' wy in
(reduce_12 q, reduce_12 r)
| N4 wx, Nn n wy =>
- let wx':= extend n w12 (GenBase.extend w4_op.(znz_0W) 8 wx) in
+ let wx':= extend n w12 (GenBase.extend w4_0W 8 wx) in
let (q, r):= (make_op n).(znz_div_gt) wx' wy in
(reduce_n n q, reduce_n n r)
| N5 wx, N0 wy => let (q, r):= w0_divn1 5 wx wy in (reduce_5 q, reduce_0 r)
@@ -2617,35 +2618,35 @@ Module Make (W0:W0Type).
| N5 wx, N4 wy => let (q, r):= w4_divn1 1 wx wy in (reduce_5 q, reduce_4 r)
| N5 wx, N5 wy => let (q, r):= w5_div_gt wx wy in (reduce_5 q, reduce_5 r)
| N5 wx, N6 wy =>
- let wx':= GenBase.extend w5_op.(znz_0W) 0 wx in
+ let wx':= GenBase.extend w5_0W 0 wx in
let (q, r):= w6_div_gt wx' wy in
(reduce_6 q, reduce_6 r)
| N5 wx, N7 wy =>
- let wx':= GenBase.extend w5_op.(znz_0W) 1 wx in
+ let wx':= GenBase.extend w5_0W 1 wx in
let (q, r):= w7_div_gt wx' wy in
(reduce_7 q, reduce_7 r)
| N5 wx, N8 wy =>
- let wx':= GenBase.extend w5_op.(znz_0W) 2 wx in
+ let wx':= GenBase.extend w5_0W 2 wx in
let (q, r):= w8_div_gt wx' wy in
(reduce_8 q, reduce_8 r)
| N5 wx, N9 wy =>
- let wx':= GenBase.extend w5_op.(znz_0W) 3 wx in
+ let wx':= GenBase.extend w5_0W 3 wx in
let (q, r):= w9_div_gt wx' wy in
(reduce_9 q, reduce_9 r)
| N5 wx, N10 wy =>
- let wx':= GenBase.extend w5_op.(znz_0W) 4 wx in
+ let wx':= GenBase.extend w5_0W 4 wx in
let (q, r):= w10_div_gt wx' wy in
(reduce_10 q, reduce_10 r)
| N5 wx, N11 wy =>
- let wx':= GenBase.extend w5_op.(znz_0W) 5 wx in
+ let wx':= GenBase.extend w5_0W 5 wx in
let (q, r):= w11_div_gt wx' wy in
(reduce_11 q, reduce_11 r)
| N5 wx, N12 wy =>
- let wx':= GenBase.extend w5_op.(znz_0W) 6 wx in
+ let wx':= GenBase.extend w5_0W 6 wx in
let (q, r):= w12_div_gt wx' wy in
(reduce_12 q, reduce_12 r)
| N5 wx, Nn n wy =>
- let wx':= extend n w12 (GenBase.extend w5_op.(znz_0W) 7 wx) in
+ let wx':= extend n w12 (GenBase.extend w5_0W 7 wx) in
let (q, r):= (make_op n).(znz_div_gt) wx' wy in
(reduce_n n q, reduce_n n r)
| N6 wx, N0 wy => let (q, r):= w0_divn1 6 wx wy in (reduce_6 q, reduce_0 r)
@@ -2656,31 +2657,31 @@ Module Make (W0:W0Type).
| N6 wx, N5 wy => let (q, r):= w5_divn1 1 wx wy in (reduce_6 q, reduce_5 r)
| N6 wx, N6 wy => let (q, r):= w6_div_gt wx wy in (reduce_6 q, reduce_6 r)
| N6 wx, N7 wy =>
- let wx':= GenBase.extend w6_op.(znz_0W) 0 wx in
+ let wx':= GenBase.extend w6_0W 0 wx in
let (q, r):= w7_div_gt wx' wy in
(reduce_7 q, reduce_7 r)
| N6 wx, N8 wy =>
- let wx':= GenBase.extend w6_op.(znz_0W) 1 wx in
+ let wx':= GenBase.extend w6_0W 1 wx in
let (q, r):= w8_div_gt wx' wy in
(reduce_8 q, reduce_8 r)
| N6 wx, N9 wy =>
- let wx':= GenBase.extend w6_op.(znz_0W) 2 wx in
+ let wx':= GenBase.extend w6_0W 2 wx in
let (q, r):= w9_div_gt wx' wy in
(reduce_9 q, reduce_9 r)
| N6 wx, N10 wy =>
- let wx':= GenBase.extend w6_op.(znz_0W) 3 wx in
+ let wx':= GenBase.extend w6_0W 3 wx in
let (q, r):= w10_div_gt wx' wy in
(reduce_10 q, reduce_10 r)
| N6 wx, N11 wy =>
- let wx':= GenBase.extend w6_op.(znz_0W) 4 wx in
+ let wx':= GenBase.extend w6_0W 4 wx in
let (q, r):= w11_div_gt wx' wy in
(reduce_11 q, reduce_11 r)
| N6 wx, N12 wy =>
- let wx':= GenBase.extend w6_op.(znz_0W) 5 wx in
+ let wx':= GenBase.extend w6_0W 5 wx in
let (q, r):= w12_div_gt wx' wy in
(reduce_12 q, reduce_12 r)
| N6 wx, Nn n wy =>
- let wx':= extend n w12 (GenBase.extend w6_op.(znz_0W) 6 wx) in
+ let wx':= extend n w12 (GenBase.extend w6_0W 6 wx) in
let (q, r):= (make_op n).(znz_div_gt) wx' wy in
(reduce_n n q, reduce_n n r)
| N7 wx, N0 wy => let (q, r):= w0_divn1 7 wx wy in (reduce_7 q, reduce_0 r)
@@ -2692,27 +2693,27 @@ Module Make (W0:W0Type).
| N7 wx, N6 wy => let (q, r):= w6_divn1 1 wx wy in (reduce_7 q, reduce_6 r)
| N7 wx, N7 wy => let (q, r):= w7_div_gt wx wy in (reduce_7 q, reduce_7 r)
| N7 wx, N8 wy =>
- let wx':= GenBase.extend w7_op.(znz_0W) 0 wx in
+ let wx':= GenBase.extend w7_0W 0 wx in
let (q, r):= w8_div_gt wx' wy in
(reduce_8 q, reduce_8 r)
| N7 wx, N9 wy =>
- let wx':= GenBase.extend w7_op.(znz_0W) 1 wx in
+ let wx':= GenBase.extend w7_0W 1 wx in
let (q, r):= w9_div_gt wx' wy in
(reduce_9 q, reduce_9 r)
| N7 wx, N10 wy =>
- let wx':= GenBase.extend w7_op.(znz_0W) 2 wx in
+ let wx':= GenBase.extend w7_0W 2 wx in
let (q, r):= w10_div_gt wx' wy in
(reduce_10 q, reduce_10 r)
| N7 wx, N11 wy =>
- let wx':= GenBase.extend w7_op.(znz_0W) 3 wx in
+ let wx':= GenBase.extend w7_0W 3 wx in
let (q, r):= w11_div_gt wx' wy in
(reduce_11 q, reduce_11 r)
| N7 wx, N12 wy =>
- let wx':= GenBase.extend w7_op.(znz_0W) 4 wx in
+ let wx':= GenBase.extend w7_0W 4 wx in
let (q, r):= w12_div_gt wx' wy in
(reduce_12 q, reduce_12 r)
| N7 wx, Nn n wy =>
- let wx':= extend n w12 (GenBase.extend w7_op.(znz_0W) 5 wx) in
+ let wx':= extend n w12 (GenBase.extend w7_0W 5 wx) in
let (q, r):= (make_op n).(znz_div_gt) wx' wy in
(reduce_n n q, reduce_n n r)
| N8 wx, N0 wy => let (q, r):= w0_divn1 8 wx wy in (reduce_8 q, reduce_0 r)
@@ -2725,23 +2726,23 @@ Module Make (W0:W0Type).
| N8 wx, N7 wy => let (q, r):= w7_divn1 1 wx wy in (reduce_8 q, reduce_7 r)
| N8 wx, N8 wy => let (q, r):= w8_div_gt wx wy in (reduce_8 q, reduce_8 r)
| N8 wx, N9 wy =>
- let wx':= GenBase.extend w8_op.(znz_0W) 0 wx in
+ let wx':= GenBase.extend w8_0W 0 wx in
let (q, r):= w9_div_gt wx' wy in
(reduce_9 q, reduce_9 r)
| N8 wx, N10 wy =>
- let wx':= GenBase.extend w8_op.(znz_0W) 1 wx in
+ let wx':= GenBase.extend w8_0W 1 wx in
let (q, r):= w10_div_gt wx' wy in
(reduce_10 q, reduce_10 r)
| N8 wx, N11 wy =>
- let wx':= GenBase.extend w8_op.(znz_0W) 2 wx in
+ let wx':= GenBase.extend w8_0W 2 wx in
let (q, r):= w11_div_gt wx' wy in
(reduce_11 q, reduce_11 r)
| N8 wx, N12 wy =>
- let wx':= GenBase.extend w8_op.(znz_0W) 3 wx in
+ let wx':= GenBase.extend w8_0W 3 wx in
let (q, r):= w12_div_gt wx' wy in
(reduce_12 q, reduce_12 r)
| N8 wx, Nn n wy =>
- let wx':= extend n w12 (GenBase.extend w8_op.(znz_0W) 4 wx) in
+ let wx':= extend n w12 (GenBase.extend w8_0W 4 wx) in
let (q, r):= (make_op n).(znz_div_gt) wx' wy in
(reduce_n n q, reduce_n n r)
| N9 wx, N0 wy => let (q, r):= w0_divn1 9 wx wy in (reduce_9 q, reduce_0 r)
@@ -2755,19 +2756,19 @@ Module Make (W0:W0Type).
| N9 wx, N8 wy => let (q, r):= w8_divn1 1 wx wy in (reduce_9 q, reduce_8 r)
| N9 wx, N9 wy => let (q, r):= w9_div_gt wx wy in (reduce_9 q, reduce_9 r)
| N9 wx, N10 wy =>
- let wx':= GenBase.extend w9_op.(znz_0W) 0 wx in
+ let wx':= GenBase.extend w9_0W 0 wx in
let (q, r):= w10_div_gt wx' wy in
(reduce_10 q, reduce_10 r)
| N9 wx, N11 wy =>
- let wx':= GenBase.extend w9_op.(znz_0W) 1 wx in
+ let wx':= GenBase.extend w9_0W 1 wx in
let (q, r):= w11_div_gt wx' wy in
(reduce_11 q, reduce_11 r)
| N9 wx, N12 wy =>
- let wx':= GenBase.extend w9_op.(znz_0W) 2 wx in
+ let wx':= GenBase.extend w9_0W 2 wx in
let (q, r):= w12_div_gt wx' wy in
(reduce_12 q, reduce_12 r)
| N9 wx, Nn n wy =>
- let wx':= extend n w12 (GenBase.extend w9_op.(znz_0W) 3 wx) in
+ let wx':= extend n w12 (GenBase.extend w9_0W 3 wx) in
let (q, r):= (make_op n).(znz_div_gt) wx' wy in
(reduce_n n q, reduce_n n r)
| N10 wx, N0 wy => let (q, r):= w0_divn1 10 wx wy in (reduce_10 q, reduce_0 r)
@@ -2782,15 +2783,15 @@ Module Make (W0:W0Type).
| N10 wx, N9 wy => let (q, r):= w9_divn1 1 wx wy in (reduce_10 q, reduce_9 r)
| N10 wx, N10 wy => let (q, r):= w10_div_gt wx wy in (reduce_10 q, reduce_10 r)
| N10 wx, N11 wy =>
- let wx':= GenBase.extend w10_op.(znz_0W) 0 wx in
+ let wx':= GenBase.extend w10_0W 0 wx in
let (q, r):= w11_div_gt wx' wy in
(reduce_11 q, reduce_11 r)
| N10 wx, N12 wy =>
- let wx':= GenBase.extend w10_op.(znz_0W) 1 wx in
+ let wx':= GenBase.extend w10_0W 1 wx in
let (q, r):= w12_div_gt wx' wy in
(reduce_12 q, reduce_12 r)
| N10 wx, Nn n wy =>
- let wx':= extend n w12 (GenBase.extend w10_op.(znz_0W) 2 wx) in
+ let wx':= extend n w12 (GenBase.extend w10_0W 2 wx) in
let (q, r):= (make_op n).(znz_div_gt) wx' wy in
(reduce_n n q, reduce_n n r)
| N11 wx, N0 wy => let (q, r):= w0_divn1 11 wx wy in (reduce_11 q, reduce_0 r)
@@ -2806,11 +2807,11 @@ Module Make (W0:W0Type).
| N11 wx, N10 wy => let (q, r):= w10_divn1 1 wx wy in (reduce_11 q, reduce_10 r)
| N11 wx, N11 wy => let (q, r):= w11_div_gt wx wy in (reduce_11 q, reduce_11 r)
| N11 wx, N12 wy =>
- let wx':= GenBase.extend w11_op.(znz_0W) 0 wx in
+ let wx':= GenBase.extend w11_0W 0 wx in
let (q, r):= w12_div_gt wx' wy in
(reduce_12 q, reduce_12 r)
| N11 wx, Nn n wy =>
- let wx':= extend n w12 (GenBase.extend w11_op.(znz_0W) 1 wx) in
+ let wx':= extend n w12 (GenBase.extend w11_0W 1 wx) in
let (q, r):= (make_op n).(znz_div_gt) wx' wy in
(reduce_n n q, reduce_n n r)
| N12 wx, N0 wy => let (q, r):= w0_divn1 12 wx wy in (reduce_12 q, reduce_0 r)
@@ -2827,55 +2828,55 @@ Module Make (W0:W0Type).
| N12 wx, N11 wy => let (q, r):= w11_divn1 1 wx wy in (reduce_12 q, reduce_11 r)
| N12 wx, N12 wy => let (q, r):= w12_div_gt wx wy in (reduce_12 q, reduce_12 r)
| N12 wx, Nn n wy =>
- let wx':= extend n w12 (GenBase.extend w12_op.(znz_0W) 0 wx) in
+ let wx':= extend n w12 (GenBase.extend w12_0W 0 wx) in
let (q, r):= (make_op n).(znz_div_gt) wx' wy in
(reduce_n n q, reduce_n n r)
| Nn n wx, N0 wy =>
- let wy':= GenBase.extend w0_op.(znz_0W) 11 wy in
+ let wy':= GenBase.extend w0_0W 11 wy in
let (q, r):= w12_divn1 (S n) wx wy' in
(reduce_n n q, reduce_12 r)
| Nn n wx, N1 wy =>
- let wy':= GenBase.extend w1_op.(znz_0W) 10 wy in
+ let wy':= GenBase.extend w1_0W 10 wy in
let (q, r):= w12_divn1 (S n) wx wy' in
(reduce_n n q, reduce_12 r)
| Nn n wx, N2 wy =>
- let wy':= GenBase.extend w2_op.(znz_0W) 9 wy in
+ let wy':= GenBase.extend w2_0W 9 wy in
let (q, r):= w12_divn1 (S n) wx wy' in
(reduce_n n q, reduce_12 r)
| Nn n wx, N3 wy =>
- let wy':= GenBase.extend w3_op.(znz_0W) 8 wy in
+ let wy':= GenBase.extend w3_0W 8 wy in
let (q, r):= w12_divn1 (S n) wx wy' in
(reduce_n n q, reduce_12 r)
| Nn n wx, N4 wy =>
- let wy':= GenBase.extend w4_op.(znz_0W) 7 wy in
+ let wy':= GenBase.extend w4_0W 7 wy in
let (q, r):= w12_divn1 (S n) wx wy' in
(reduce_n n q, reduce_12 r)
| Nn n wx, N5 wy =>
- let wy':= GenBase.extend w5_op.(znz_0W) 6 wy in
+ let wy':= GenBase.extend w5_0W 6 wy in
let (q, r):= w12_divn1 (S n) wx wy' in
(reduce_n n q, reduce_12 r)
| Nn n wx, N6 wy =>
- let wy':= GenBase.extend w6_op.(znz_0W) 5 wy in
+ let wy':= GenBase.extend w6_0W 5 wy in
let (q, r):= w12_divn1 (S n) wx wy' in
(reduce_n n q, reduce_12 r)
| Nn n wx, N7 wy =>
- let wy':= GenBase.extend w7_op.(znz_0W) 4 wy in
+ let wy':= GenBase.extend w7_0W 4 wy in
let (q, r):= w12_divn1 (S n) wx wy' in
(reduce_n n q, reduce_12 r)
| Nn n wx, N8 wy =>
- let wy':= GenBase.extend w8_op.(znz_0W) 3 wy in
+ let wy':= GenBase.extend w8_0W 3 wy in
let (q, r):= w12_divn1 (S n) wx wy' in
(reduce_n n q, reduce_12 r)
| Nn n wx, N9 wy =>
- let wy':= GenBase.extend w9_op.(znz_0W) 2 wy in
+ let wy':= GenBase.extend w9_0W 2 wy in
let (q, r):= w12_divn1 (S n) wx wy' in
(reduce_n n q, reduce_12 r)
| Nn n wx, N10 wy =>
- let wy':= GenBase.extend w10_op.(znz_0W) 1 wy in
+ let wy':= GenBase.extend w10_0W 1 wy in
let (q, r):= w12_divn1 (S n) wx wy' in
(reduce_n n q, reduce_12 r)
| Nn n wx, N11 wy =>
- let wy':= GenBase.extend w11_op.(znz_0W) 0 wy in
+ let wy':= GenBase.extend w11_0W 0 wy in
let (q, r):= w12_divn1 (S n) wx wy' in
(reduce_n n q, reduce_12 r)
| Nn n wx, N12 wy =>
@@ -2973,151 +2974,151 @@ Module Make (W0:W0Type).
match x, y with
| N0 wx, N0 wy => reduce_0 (w0_mod_gt wx wy)
| N0 wx, N1 wy =>
- let wx':= GenBase.extend w0_op.(znz_0W) 0 wx in
+ let wx':= GenBase.extend w0_0W 0 wx in
reduce_1 (w1_mod_gt wx' wy)
| N0 wx, N2 wy =>
- let wx':= GenBase.extend w0_op.(znz_0W) 1 wx in
+ let wx':= GenBase.extend w0_0W 1 wx in
reduce_2 (w2_mod_gt wx' wy)
| N0 wx, N3 wy =>
- let wx':= GenBase.extend w0_op.(znz_0W) 2 wx in
+ let wx':= GenBase.extend w0_0W 2 wx in
reduce_3 (w3_mod_gt wx' wy)
| N0 wx, N4 wy =>
- let wx':= GenBase.extend w0_op.(znz_0W) 3 wx in
+ let wx':= GenBase.extend w0_0W 3 wx in
reduce_4 (w4_mod_gt wx' wy)
| N0 wx, N5 wy =>
- let wx':= GenBase.extend w0_op.(znz_0W) 4 wx in
+ let wx':= GenBase.extend w0_0W 4 wx in
reduce_5 (w5_mod_gt wx' wy)
| N0 wx, N6 wy =>
- let wx':= GenBase.extend w0_op.(znz_0W) 5 wx in
+ let wx':= GenBase.extend w0_0W 5 wx in
reduce_6 (w6_mod_gt wx' wy)
| N0 wx, N7 wy =>
- let wx':= GenBase.extend w0_op.(znz_0W) 6 wx in
+ let wx':= GenBase.extend w0_0W 6 wx in
reduce_7 (w7_mod_gt wx' wy)
| N0 wx, N8 wy =>
- let wx':= GenBase.extend w0_op.(znz_0W) 7 wx in
+ let wx':= GenBase.extend w0_0W 7 wx in
reduce_8 (w8_mod_gt wx' wy)
| N0 wx, N9 wy =>
- let wx':= GenBase.extend w0_op.(znz_0W) 8 wx in
+ let wx':= GenBase.extend w0_0W 8 wx in
reduce_9 (w9_mod_gt wx' wy)
| N0 wx, N10 wy =>
- let wx':= GenBase.extend w0_op.(znz_0W) 9 wx in
+ let wx':= GenBase.extend w0_0W 9 wx in
reduce_10 (w10_mod_gt wx' wy)
| N0 wx, N11 wy =>
- let wx':= GenBase.extend w0_op.(znz_0W) 10 wx in
+ let wx':= GenBase.extend w0_0W 10 wx in
reduce_11 (w11_mod_gt wx' wy)
| N0 wx, N12 wy =>
- let wx':= GenBase.extend w0_op.(znz_0W) 11 wx in
+ let wx':= GenBase.extend w0_0W 11 wx in
reduce_12 (w12_mod_gt wx' wy)
| N0 wx, Nn n wy =>
- let wx':= extend n w12 (GenBase.extend w0_op.(znz_0W) 12 wx) in
+ let wx':= extend n w12 (GenBase.extend w0_0W 12 wx) in
reduce_n n ((make_op n).(znz_mod_gt) wx' wy)
| N1 wx, N0 wy => reduce_0 (w0_modn1 1 wx wy)
| N1 wx, N1 wy => reduce_1 (w1_mod_gt wx wy)
| N1 wx, N2 wy =>
- let wx':= GenBase.extend w1_op.(znz_0W) 0 wx in
+ let wx':= GenBase.extend w1_0W 0 wx in
reduce_2 (w2_mod_gt wx' wy)
| N1 wx, N3 wy =>
- let wx':= GenBase.extend w1_op.(znz_0W) 1 wx in
+ let wx':= GenBase.extend w1_0W 1 wx in
reduce_3 (w3_mod_gt wx' wy)
| N1 wx, N4 wy =>
- let wx':= GenBase.extend w1_op.(znz_0W) 2 wx in
+ let wx':= GenBase.extend w1_0W 2 wx in
reduce_4 (w4_mod_gt wx' wy)
| N1 wx, N5 wy =>
- let wx':= GenBase.extend w1_op.(znz_0W) 3 wx in
+ let wx':= GenBase.extend w1_0W 3 wx in
reduce_5 (w5_mod_gt wx' wy)
| N1 wx, N6 wy =>
- let wx':= GenBase.extend w1_op.(znz_0W) 4 wx in
+ let wx':= GenBase.extend w1_0W 4 wx in
reduce_6 (w6_mod_gt wx' wy)
| N1 wx, N7 wy =>
- let wx':= GenBase.extend w1_op.(znz_0W) 5 wx in
+ let wx':= GenBase.extend w1_0W 5 wx in
reduce_7 (w7_mod_gt wx' wy)
| N1 wx, N8 wy =>
- let wx':= GenBase.extend w1_op.(znz_0W) 6 wx in
+ let wx':= GenBase.extend w1_0W 6 wx in
reduce_8 (w8_mod_gt wx' wy)
| N1 wx, N9 wy =>
- let wx':= GenBase.extend w1_op.(znz_0W) 7 wx in
+ let wx':= GenBase.extend w1_0W 7 wx in
reduce_9 (w9_mod_gt wx' wy)
| N1 wx, N10 wy =>
- let wx':= GenBase.extend w1_op.(znz_0W) 8 wx in
+ let wx':= GenBase.extend w1_0W 8 wx in
reduce_10 (w10_mod_gt wx' wy)
| N1 wx, N11 wy =>
- let wx':= GenBase.extend w1_op.(znz_0W) 9 wx in
+ let wx':= GenBase.extend w1_0W 9 wx in
reduce_11 (w11_mod_gt wx' wy)
| N1 wx, N12 wy =>
- let wx':= GenBase.extend w1_op.(znz_0W) 10 wx in
+ let wx':= GenBase.extend w1_0W 10 wx in
reduce_12 (w12_mod_gt wx' wy)
| N1 wx, Nn n wy =>
- let wx':= extend n w12 (GenBase.extend w1_op.(znz_0W) 11 wx) in
+ let wx':= extend n w12 (GenBase.extend w1_0W 11 wx) in
reduce_n n ((make_op n).(znz_mod_gt) wx' wy)
| N2 wx, N0 wy => reduce_0 (w0_modn1 2 wx wy)
| N2 wx, N1 wy => reduce_1 (w1_modn1 1 wx wy)
| N2 wx, N2 wy => reduce_2 (w2_mod_gt wx wy)
| N2 wx, N3 wy =>
- let wx':= GenBase.extend w2_op.(znz_0W) 0 wx in
+ let wx':= GenBase.extend w2_0W 0 wx in
reduce_3 (w3_mod_gt wx' wy)
| N2 wx, N4 wy =>
- let wx':= GenBase.extend w2_op.(znz_0W) 1 wx in
+ let wx':= GenBase.extend w2_0W 1 wx in
reduce_4 (w4_mod_gt wx' wy)
| N2 wx, N5 wy =>
- let wx':= GenBase.extend w2_op.(znz_0W) 2 wx in
+ let wx':= GenBase.extend w2_0W 2 wx in
reduce_5 (w5_mod_gt wx' wy)
| N2 wx, N6 wy =>
- let wx':= GenBase.extend w2_op.(znz_0W) 3 wx in
+ let wx':= GenBase.extend w2_0W 3 wx in
reduce_6 (w6_mod_gt wx' wy)
| N2 wx, N7 wy =>
- let wx':= GenBase.extend w2_op.(znz_0W) 4 wx in
+ let wx':= GenBase.extend w2_0W 4 wx in
reduce_7 (w7_mod_gt wx' wy)
| N2 wx, N8 wy =>
- let wx':= GenBase.extend w2_op.(znz_0W) 5 wx in
+ let wx':= GenBase.extend w2_0W 5 wx in
reduce_8 (w8_mod_gt wx' wy)
| N2 wx, N9 wy =>
- let wx':= GenBase.extend w2_op.(znz_0W) 6 wx in
+ let wx':= GenBase.extend w2_0W 6 wx in
reduce_9 (w9_mod_gt wx' wy)
| N2 wx, N10 wy =>
- let wx':= GenBase.extend w2_op.(znz_0W) 7 wx in
+ let wx':= GenBase.extend w2_0W 7 wx in
reduce_10 (w10_mod_gt wx' wy)
| N2 wx, N11 wy =>
- let wx':= GenBase.extend w2_op.(znz_0W) 8 wx in
+ let wx':= GenBase.extend w2_0W 8 wx in
reduce_11 (w11_mod_gt wx' wy)
| N2 wx, N12 wy =>
- let wx':= GenBase.extend w2_op.(znz_0W) 9 wx in
+ let wx':= GenBase.extend w2_0W 9 wx in
reduce_12 (w12_mod_gt wx' wy)
| N2 wx, Nn n wy =>
- let wx':= extend n w12 (GenBase.extend w2_op.(znz_0W) 10 wx) in
+ let wx':= extend n w12 (GenBase.extend w2_0W 10 wx) in
reduce_n n ((make_op n).(znz_mod_gt) wx' wy)
| N3 wx, N0 wy => reduce_0 (w0_modn1 3 wx wy)
| N3 wx, N1 wy => reduce_1 (w1_modn1 2 wx wy)
| N3 wx, N2 wy => reduce_2 (w2_modn1 1 wx wy)
| N3 wx, N3 wy => reduce_3 (w3_mod_gt wx wy)
| N3 wx, N4 wy =>
- let wx':= GenBase.extend w3_op.(znz_0W) 0 wx in
+ let wx':= GenBase.extend w3_0W 0 wx in
reduce_4 (w4_mod_gt wx' wy)
| N3 wx, N5 wy =>
- let wx':= GenBase.extend w3_op.(znz_0W) 1 wx in
+ let wx':= GenBase.extend w3_0W 1 wx in
reduce_5 (w5_mod_gt wx' wy)
| N3 wx, N6 wy =>
- let wx':= GenBase.extend w3_op.(znz_0W) 2 wx in
+ let wx':= GenBase.extend w3_0W 2 wx in
reduce_6 (w6_mod_gt wx' wy)
| N3 wx, N7 wy =>
- let wx':= GenBase.extend w3_op.(znz_0W) 3 wx in
+ let wx':= GenBase.extend w3_0W 3 wx in
reduce_7 (w7_mod_gt wx' wy)
| N3 wx, N8 wy =>
- let wx':= GenBase.extend w3_op.(znz_0W) 4 wx in
+ let wx':= GenBase.extend w3_0W 4 wx in
reduce_8 (w8_mod_gt wx' wy)
| N3 wx, N9 wy =>
- let wx':= GenBase.extend w3_op.(znz_0W) 5 wx in
+ let wx':= GenBase.extend w3_0W 5 wx in
reduce_9 (w9_mod_gt wx' wy)
| N3 wx, N10 wy =>
- let wx':= GenBase.extend w3_op.(znz_0W) 6 wx in
+ let wx':= GenBase.extend w3_0W 6 wx in
reduce_10 (w10_mod_gt wx' wy)
| N3 wx, N11 wy =>
- let wx':= GenBase.extend w3_op.(znz_0W) 7 wx in
+ let wx':= GenBase.extend w3_0W 7 wx in
reduce_11 (w11_mod_gt wx' wy)
| N3 wx, N12 wy =>
- let wx':= GenBase.extend w3_op.(znz_0W) 8 wx in
+ let wx':= GenBase.extend w3_0W 8 wx in
reduce_12 (w12_mod_gt wx' wy)
| N3 wx, Nn n wy =>
- let wx':= extend n w12 (GenBase.extend w3_op.(znz_0W) 9 wx) in
+ let wx':= extend n w12 (GenBase.extend w3_0W 9 wx) in
reduce_n n ((make_op n).(znz_mod_gt) wx' wy)
| N4 wx, N0 wy => reduce_0 (w0_modn1 4 wx wy)
| N4 wx, N1 wy => reduce_1 (w1_modn1 3 wx wy)
@@ -3125,31 +3126,31 @@ Module Make (W0:W0Type).
| N4 wx, N3 wy => reduce_3 (w3_modn1 1 wx wy)
| N4 wx, N4 wy => reduce_4 (w4_mod_gt wx wy)
| N4 wx, N5 wy =>
- let wx':= GenBase.extend w4_op.(znz_0W) 0 wx in
+ let wx':= GenBase.extend w4_0W 0 wx in
reduce_5 (w5_mod_gt wx' wy)
| N4 wx, N6 wy =>
- let wx':= GenBase.extend w4_op.(znz_0W) 1 wx in
+ let wx':= GenBase.extend w4_0W 1 wx in
reduce_6 (w6_mod_gt wx' wy)
| N4 wx, N7 wy =>
- let wx':= GenBase.extend w4_op.(znz_0W) 2 wx in
+ let wx':= GenBase.extend w4_0W 2 wx in
reduce_7 (w7_mod_gt wx' wy)
| N4 wx, N8 wy =>
- let wx':= GenBase.extend w4_op.(znz_0W) 3 wx in
+ let wx':= GenBase.extend w4_0W 3 wx in
reduce_8 (w8_mod_gt wx' wy)
| N4 wx, N9 wy =>
- let wx':= GenBase.extend w4_op.(znz_0W) 4 wx in
+ let wx':= GenBase.extend w4_0W 4 wx in
reduce_9 (w9_mod_gt wx' wy)
| N4 wx, N10 wy =>
- let wx':= GenBase.extend w4_op.(znz_0W) 5 wx in
+ let wx':= GenBase.extend w4_0W 5 wx in
reduce_10 (w10_mod_gt wx' wy)
| N4 wx, N11 wy =>
- let wx':= GenBase.extend w4_op.(znz_0W) 6 wx in
+ let wx':= GenBase.extend w4_0W 6 wx in
reduce_11 (w11_mod_gt wx' wy)
| N4 wx, N12 wy =>
- let wx':= GenBase.extend w4_op.(znz_0W) 7 wx in
+ let wx':= GenBase.extend w4_0W 7 wx in
reduce_12 (w12_mod_gt wx' wy)
| N4 wx, Nn n wy =>
- let wx':= extend n w12 (GenBase.extend w4_op.(znz_0W) 8 wx) in
+ let wx':= extend n w12 (GenBase.extend w4_0W 8 wx) in
reduce_n n ((make_op n).(znz_mod_gt) wx' wy)
| N5 wx, N0 wy => reduce_0 (w0_modn1 5 wx wy)
| N5 wx, N1 wy => reduce_1 (w1_modn1 4 wx wy)
@@ -3158,28 +3159,28 @@ Module Make (W0:W0Type).
| N5 wx, N4 wy => reduce_4 (w4_modn1 1 wx wy)
| N5 wx, N5 wy => reduce_5 (w5_mod_gt wx wy)
| N5 wx, N6 wy =>
- let wx':= GenBase.extend w5_op.(znz_0W) 0 wx in
+ let wx':= GenBase.extend w5_0W 0 wx in
reduce_6 (w6_mod_gt wx' wy)
| N5 wx, N7 wy =>
- let wx':= GenBase.extend w5_op.(znz_0W) 1 wx in
+ let wx':= GenBase.extend w5_0W 1 wx in
reduce_7 (w7_mod_gt wx' wy)
| N5 wx, N8 wy =>
- let wx':= GenBase.extend w5_op.(znz_0W) 2 wx in
+ let wx':= GenBase.extend w5_0W 2 wx in
reduce_8 (w8_mod_gt wx' wy)
| N5 wx, N9 wy =>
- let wx':= GenBase.extend w5_op.(znz_0W) 3 wx in
+ let wx':= GenBase.extend w5_0W 3 wx in
reduce_9 (w9_mod_gt wx' wy)
| N5 wx, N10 wy =>
- let wx':= GenBase.extend w5_op.(znz_0W) 4 wx in
+ let wx':= GenBase.extend w5_0W 4 wx in
reduce_10 (w10_mod_gt wx' wy)
| N5 wx, N11 wy =>
- let wx':= GenBase.extend w5_op.(znz_0W) 5 wx in
+ let wx':= GenBase.extend w5_0W 5 wx in
reduce_11 (w11_mod_gt wx' wy)
| N5 wx, N12 wy =>
- let wx':= GenBase.extend w5_op.(znz_0W) 6 wx in
+ let wx':= GenBase.extend w5_0W 6 wx in
reduce_12 (w12_mod_gt wx' wy)
| N5 wx, Nn n wy =>
- let wx':= extend n w12 (GenBase.extend w5_op.(znz_0W) 7 wx) in
+ let wx':= extend n w12 (GenBase.extend w5_0W 7 wx) in
reduce_n n ((make_op n).(znz_mod_gt) wx' wy)
| N6 wx, N0 wy => reduce_0 (w0_modn1 6 wx wy)
| N6 wx, N1 wy => reduce_1 (w1_modn1 5 wx wy)
@@ -3189,25 +3190,25 @@ Module Make (W0:W0Type).
| N6 wx, N5 wy => reduce_5 (w5_modn1 1 wx wy)
| N6 wx, N6 wy => reduce_6 (w6_mod_gt wx wy)
| N6 wx, N7 wy =>
- let wx':= GenBase.extend w6_op.(znz_0W) 0 wx in
+ let wx':= GenBase.extend w6_0W 0 wx in
reduce_7 (w7_mod_gt wx' wy)
| N6 wx, N8 wy =>
- let wx':= GenBase.extend w6_op.(znz_0W) 1 wx in
+ let wx':= GenBase.extend w6_0W 1 wx in
reduce_8 (w8_mod_gt wx' wy)
| N6 wx, N9 wy =>
- let wx':= GenBase.extend w6_op.(znz_0W) 2 wx in
+ let wx':= GenBase.extend w6_0W 2 wx in
reduce_9 (w9_mod_gt wx' wy)
| N6 wx, N10 wy =>
- let wx':= GenBase.extend w6_op.(znz_0W) 3 wx in
+ let wx':= GenBase.extend w6_0W 3 wx in
reduce_10 (w10_mod_gt wx' wy)
| N6 wx, N11 wy =>
- let wx':= GenBase.extend w6_op.(znz_0W) 4 wx in
+ let wx':= GenBase.extend w6_0W 4 wx in
reduce_11 (w11_mod_gt wx' wy)
| N6 wx, N12 wy =>
- let wx':= GenBase.extend w6_op.(znz_0W) 5 wx in
+ let wx':= GenBase.extend w6_0W 5 wx in
reduce_12 (w12_mod_gt wx' wy)
| N6 wx, Nn n wy =>
- let wx':= extend n w12 (GenBase.extend w6_op.(znz_0W) 6 wx) in
+ let wx':= extend n w12 (GenBase.extend w6_0W 6 wx) in
reduce_n n ((make_op n).(znz_mod_gt) wx' wy)
| N7 wx, N0 wy => reduce_0 (w0_modn1 7 wx wy)
| N7 wx, N1 wy => reduce_1 (w1_modn1 6 wx wy)
@@ -3218,22 +3219,22 @@ Module Make (W0:W0Type).
| N7 wx, N6 wy => reduce_6 (w6_modn1 1 wx wy)
| N7 wx, N7 wy => reduce_7 (w7_mod_gt wx wy)
| N7 wx, N8 wy =>
- let wx':= GenBase.extend w7_op.(znz_0W) 0 wx in
+ let wx':= GenBase.extend w7_0W 0 wx in
reduce_8 (w8_mod_gt wx' wy)
| N7 wx, N9 wy =>
- let wx':= GenBase.extend w7_op.(znz_0W) 1 wx in
+ let wx':= GenBase.extend w7_0W 1 wx in
reduce_9 (w9_mod_gt wx' wy)
| N7 wx, N10 wy =>
- let wx':= GenBase.extend w7_op.(znz_0W) 2 wx in
+ let wx':= GenBase.extend w7_0W 2 wx in
reduce_10 (w10_mod_gt wx' wy)
| N7 wx, N11 wy =>
- let wx':= GenBase.extend w7_op.(znz_0W) 3 wx in
+ let wx':= GenBase.extend w7_0W 3 wx in
reduce_11 (w11_mod_gt wx' wy)
| N7 wx, N12 wy =>
- let wx':= GenBase.extend w7_op.(znz_0W) 4 wx in
+ let wx':= GenBase.extend w7_0W 4 wx in
reduce_12 (w12_mod_gt wx' wy)
| N7 wx, Nn n wy =>
- let wx':= extend n w12 (GenBase.extend w7_op.(znz_0W) 5 wx) in
+ let wx':= extend n w12 (GenBase.extend w7_0W 5 wx) in
reduce_n n ((make_op n).(znz_mod_gt) wx' wy)
| N8 wx, N0 wy => reduce_0 (w0_modn1 8 wx wy)
| N8 wx, N1 wy => reduce_1 (w1_modn1 7 wx wy)
@@ -3245,19 +3246,19 @@ Module Make (W0:W0Type).
| N8 wx, N7 wy => reduce_7 (w7_modn1 1 wx wy)
| N8 wx, N8 wy => reduce_8 (w8_mod_gt wx wy)
| N8 wx, N9 wy =>
- let wx':= GenBase.extend w8_op.(znz_0W) 0 wx in
+ let wx':= GenBase.extend w8_0W 0 wx in
reduce_9 (w9_mod_gt wx' wy)
| N8 wx, N10 wy =>
- let wx':= GenBase.extend w8_op.(znz_0W) 1 wx in
+ let wx':= GenBase.extend w8_0W 1 wx in
reduce_10 (w10_mod_gt wx' wy)
| N8 wx, N11 wy =>
- let wx':= GenBase.extend w8_op.(znz_0W) 2 wx in
+ let wx':= GenBase.extend w8_0W 2 wx in
reduce_11 (w11_mod_gt wx' wy)
| N8 wx, N12 wy =>
- let wx':= GenBase.extend w8_op.(znz_0W) 3 wx in
+ let wx':= GenBase.extend w8_0W 3 wx in
reduce_12 (w12_mod_gt wx' wy)
| N8 wx, Nn n wy =>
- let wx':= extend n w12 (GenBase.extend w8_op.(znz_0W) 4 wx) in
+ let wx':= extend n w12 (GenBase.extend w8_0W 4 wx) in
reduce_n n ((make_op n).(znz_mod_gt) wx' wy)
| N9 wx, N0 wy => reduce_0 (w0_modn1 9 wx wy)
| N9 wx, N1 wy => reduce_1 (w1_modn1 8 wx wy)
@@ -3270,16 +3271,16 @@ Module Make (W0:W0Type).
| N9 wx, N8 wy => reduce_8 (w8_modn1 1 wx wy)
| N9 wx, N9 wy => reduce_9 (w9_mod_gt wx wy)
| N9 wx, N10 wy =>
- let wx':= GenBase.extend w9_op.(znz_0W) 0 wx in
+ let wx':= GenBase.extend w9_0W 0 wx in
reduce_10 (w10_mod_gt wx' wy)
| N9 wx, N11 wy =>
- let wx':= GenBase.extend w9_op.(znz_0W) 1 wx in
+ let wx':= GenBase.extend w9_0W 1 wx in
reduce_11 (w11_mod_gt wx' wy)
| N9 wx, N12 wy =>
- let wx':= GenBase.extend w9_op.(znz_0W) 2 wx in
+ let wx':= GenBase.extend w9_0W 2 wx in
reduce_12 (w12_mod_gt wx' wy)
| N9 wx, Nn n wy =>
- let wx':= extend n w12 (GenBase.extend w9_op.(znz_0W) 3 wx) in
+ let wx':= extend n w12 (GenBase.extend w9_0W 3 wx) in
reduce_n n ((make_op n).(znz_mod_gt) wx' wy)
| N10 wx, N0 wy => reduce_0 (w0_modn1 10 wx wy)
| N10 wx, N1 wy => reduce_1 (w1_modn1 9 wx wy)
@@ -3293,13 +3294,13 @@ Module Make (W0:W0Type).
| N10 wx, N9 wy => reduce_9 (w9_modn1 1 wx wy)
| N10 wx, N10 wy => reduce_10 (w10_mod_gt wx wy)
| N10 wx, N11 wy =>
- let wx':= GenBase.extend w10_op.(znz_0W) 0 wx in
+ let wx':= GenBase.extend w10_0W 0 wx in
reduce_11 (w11_mod_gt wx' wy)
| N10 wx, N12 wy =>
- let wx':= GenBase.extend w10_op.(znz_0W) 1 wx in
+ let wx':= GenBase.extend w10_0W 1 wx in
reduce_12 (w12_mod_gt wx' wy)
| N10 wx, Nn n wy =>
- let wx':= extend n w12 (GenBase.extend w10_op.(znz_0W) 2 wx) in
+ let wx':= extend n w12 (GenBase.extend w10_0W 2 wx) in
reduce_n n ((make_op n).(znz_mod_gt) wx' wy)
| N11 wx, N0 wy => reduce_0 (w0_modn1 11 wx wy)
| N11 wx, N1 wy => reduce_1 (w1_modn1 10 wx wy)
@@ -3314,10 +3315,10 @@ Module Make (W0:W0Type).
| N11 wx, N10 wy => reduce_10 (w10_modn1 1 wx wy)
| N11 wx, N11 wy => reduce_11 (w11_mod_gt wx wy)
| N11 wx, N12 wy =>
- let wx':= GenBase.extend w11_op.(znz_0W) 0 wx in
+ let wx':= GenBase.extend w11_0W 0 wx in
reduce_12 (w12_mod_gt wx' wy)
| N11 wx, Nn n wy =>
- let wx':= extend n w12 (GenBase.extend w11_op.(znz_0W) 1 wx) in
+ let wx':= extend n w12 (GenBase.extend w11_0W 1 wx) in
reduce_n n ((make_op n).(znz_mod_gt) wx' wy)
| N12 wx, N0 wy => reduce_0 (w0_modn1 12 wx wy)
| N12 wx, N1 wy => reduce_1 (w1_modn1 11 wx wy)
@@ -3333,43 +3334,43 @@ Module Make (W0:W0Type).
| N12 wx, N11 wy => reduce_11 (w11_modn1 1 wx wy)
| N12 wx, N12 wy => reduce_12 (w12_mod_gt wx wy)
| N12 wx, Nn n wy =>
- let wx':= extend n w12 (GenBase.extend w12_op.(znz_0W) 0 wx) in
+ let wx':= extend n w12 (GenBase.extend w12_0W 0 wx) in
reduce_n n ((make_op n).(znz_mod_gt) wx' wy)
| Nn n wx, N0 wy =>
- let wy':= GenBase.extend w0_op.(znz_0W) 11 wy in
+ let wy':= GenBase.extend w0_0W 11 wy in
reduce_12 (w12_modn1 (S n) wx wy')
| Nn n wx, N1 wy =>
- let wy':= GenBase.extend w1_op.(znz_0W) 10 wy in
+ let wy':= GenBase.extend w1_0W 10 wy in
reduce_12 (w12_modn1 (S n) wx wy')
| Nn n wx, N2 wy =>
- let wy':= GenBase.extend w2_op.(znz_0W) 9 wy in
+ let wy':= GenBase.extend w2_0W 9 wy in
reduce_12 (w12_modn1 (S n) wx wy')
| Nn n wx, N3 wy =>
- let wy':= GenBase.extend w3_op.(znz_0W) 8 wy in
+ let wy':= GenBase.extend w3_0W 8 wy in
reduce_12 (w12_modn1 (S n) wx wy')
| Nn n wx, N4 wy =>
- let wy':= GenBase.extend w4_op.(znz_0W) 7 wy in
+ let wy':= GenBase.extend w4_0W 7 wy in
reduce_12 (w12_modn1 (S n) wx wy')
| Nn n wx, N5 wy =>
- let wy':= GenBase.extend w5_op.(znz_0W) 6 wy in
+ let wy':= GenBase.extend w5_0W 6 wy in
reduce_12 (w12_modn1 (S n) wx wy')
| Nn n wx, N6 wy =>
- let wy':= GenBase.extend w6_op.(znz_0W) 5 wy in
+ let wy':= GenBase.extend w6_0W 5 wy in
reduce_12 (w12_modn1 (S n) wx wy')
| Nn n wx, N7 wy =>
- let wy':= GenBase.extend w7_op.(znz_0W) 4 wy in
+ let wy':= GenBase.extend w7_0W 4 wy in
reduce_12 (w12_modn1 (S n) wx wy')
| Nn n wx, N8 wy =>
- let wy':= GenBase.extend w8_op.(znz_0W) 3 wy in
+ let wy':= GenBase.extend w8_0W 3 wy in
reduce_12 (w12_modn1 (S n) wx wy')
| Nn n wx, N9 wy =>
- let wy':= GenBase.extend w9_op.(znz_0W) 2 wy in
+ let wy':= GenBase.extend w9_0W 2 wy in
reduce_12 (w12_modn1 (S n) wx wy')
| Nn n wx, N10 wy =>
- let wy':= GenBase.extend w10_op.(znz_0W) 1 wy in
+ let wy':= GenBase.extend w10_0W 1 wy in
reduce_12 (w12_modn1 (S n) wx wy')
| Nn n wx, N11 wy =>
- let wy':= GenBase.extend w11_op.(znz_0W) 0 wy in
+ let wy':= GenBase.extend w11_0W 0 wy in
reduce_12 (w12_modn1 (S n) wx wy')
| Nn n wx, N12 wy =>
let wy':= wy in
@@ -3441,8 +3442,7 @@ Module Make (W0:W0Type).
| Gt => gcd_gt (digits a) gcd_cont a b
end.
- Definition pheight p := Peano.pred (nat_of_P (get_height w0_op.(znz_digits) (plength p))).
-
+Definition pheight p := Peano.pred (nat_of_P (get_height w0_op.(znz_digits) (plength p))).
Definition of_pos x :=
let h := pheight x in
match h with
@@ -3488,5 +3488,395 @@ Module Make (W0:W0Type).
| Nn n wx => (make_op n).(znz_to_Z) wx
end.
+ Definition head0 w := match w with
+ | N0 w=> N0 (w0_op.(znz_head0) w)
+ | N1 w=> N1 (w1_op.(znz_head0) w)
+ | N2 w=> N2 (w2_op.(znz_head0) w)
+ | N3 w=> N3 (w3_op.(znz_head0) w)
+ | N4 w=> N4 (w4_op.(znz_head0) w)
+ | N5 w=> N5 (w5_op.(znz_head0) w)
+ | N6 w=> N6 (w6_op.(znz_head0) w)
+ | N7 w=> N7 (w7_op.(znz_head0) w)
+ | N8 w=> N8 (w8_op.(znz_head0) w)
+ | N9 w=> N9 (w9_op.(znz_head0) w)
+ | N10 w=> N10 (w10_op.(znz_head0) w)
+ | N11 w=> N11 (w11_op.(znz_head0) w)
+ | N12 w=> N12 (w12_op.(znz_head0) w)
+ | Nn n w=> Nn n ((make_op n).(znz_head0) w)
+ end.
+
+ Definition tail0 w := match w with
+ | N0 w=> N0 (w0_op.(znz_tail0) w)
+ | N1 w=> N1 (w1_op.(znz_tail0) w)
+ | N2 w=> N2 (w2_op.(znz_tail0) w)
+ | N3 w=> N3 (w3_op.(znz_tail0) w)
+ | N4 w=> N4 (w4_op.(znz_tail0) w)
+ | N5 w=> N5 (w5_op.(znz_tail0) w)
+ | N6 w=> N6 (w6_op.(znz_tail0) w)
+ | N7 w=> N7 (w7_op.(znz_tail0) w)
+ | N8 w=> N8 (w8_op.(znz_tail0) w)
+ | N9 w=> N9 (w9_op.(znz_tail0) w)
+ | N10 w=> N10 (w10_op.(znz_tail0) w)
+ | N11 w=> N11 (w11_op.(znz_tail0) w)
+ | N12 w=> N12 (w12_op.(znz_tail0) w)
+ | Nn n w=> Nn n ((make_op n).(znz_tail0) w)
+ end.
+
+ Definition Ndigits x :=
+ match x with
+ | N0 _ => N0 w0_op.(znz_zdigits)
+ | N1 _ => reduce_1 w1_op.(znz_zdigits)
+ | N2 _ => reduce_2 w2_op.(znz_zdigits)
+ | N3 _ => reduce_3 w3_op.(znz_zdigits)
+ | N4 _ => reduce_4 w4_op.(znz_zdigits)
+ | N5 _ => reduce_5 w5_op.(znz_zdigits)
+ | N6 _ => reduce_6 w6_op.(znz_zdigits)
+ | N7 _ => reduce_7 w7_op.(znz_zdigits)
+ | N8 _ => reduce_8 w8_op.(znz_zdigits)
+ | N9 _ => reduce_9 w9_op.(znz_zdigits)
+ | N10 _ => reduce_10 w10_op.(znz_zdigits)
+ | N11 _ => reduce_11 w11_op.(znz_zdigits)
+ | N12 _ => reduce_12 w12_op.(znz_zdigits)
+ | Nn n _ => reduce_n n (make_op n).(znz_zdigits)
+
+ end.
+
+ Definition level f0 f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 fn x y: t_ := match x, y with
+ | N0 wx, N0 wy => f0 wx wy
+ | N0 wx, N1 wy => f1 (WW w_0 wx) wy
+ | N0 wx, N2 wy => f2 (extend1 w0 (WW w_0 wx)) wy
+ | N0 wx, N3 wy => f3 (extend2 w0 (WW w_0 wx)) wy
+ | N0 wx, N4 wy => f4 (extend3 w0 (WW w_0 wx)) wy
+ | N0 wx, N5 wy => f5 (extend4 w0 (WW w_0 wx)) wy
+ | N0 wx, N6 wy => f6 (extend5 w0 (WW w_0 wx)) wy
+ | N0 wx, N7 wy => f7 (extend6 w0 (WW w_0 wx)) wy
+ | N0 wx, N8 wy => f8 (extend7 w0 (WW w_0 wx)) wy
+ | N0 wx, N9 wy => f9 (extend8 w0 (WW w_0 wx)) wy
+ | N0 wx, N10 wy => f10 (extend9 w0 (WW w_0 wx)) wy
+ | N0 wx, N11 wy => f11 (extend10 w0 (WW w_0 wx)) wy
+ | N0 wx, N12 wy => f12 (extend11 w0 (WW w_0 wx)) wy
+ | N0 wx, Nn n wy =>
+ fn n (extend n w12 (extend12 w0 (WW w_0 wx))) wy
+ | N1 wx, N0 wy =>
+ f1 wx (WW w_0 wy)
+ | N1 wx, N1 wy => f1 wx wy
+ | N1 wx, N2 wy => f2 (extend1 w0 wx) wy
+ | N1 wx, N3 wy => f3 (extend2 w0 wx) wy
+ | N1 wx, N4 wy => f4 (extend3 w0 wx) wy
+ | N1 wx, N5 wy => f5 (extend4 w0 wx) wy
+ | N1 wx, N6 wy => f6 (extend5 w0 wx) wy
+ | N1 wx, N7 wy => f7 (extend6 w0 wx) wy
+ | N1 wx, N8 wy => f8 (extend7 w0 wx) wy
+ | N1 wx, N9 wy => f9 (extend8 w0 wx) wy
+ | N1 wx, N10 wy => f10 (extend9 w0 wx) wy
+ | N1 wx, N11 wy => f11 (extend10 w0 wx) wy
+ | N1 wx, N12 wy => f12 (extend11 w0 wx) wy
+ | N1 wx, Nn n wy => fn n (extend n w12 (extend12 w0 wx)) wy
+ | N2 wx, N0 wy =>
+ f2 wx (extend1 w0 (WW w_0 wy))
+ | N2 wx, N1 wy => f2 wx (extend1 w0 wy)
+ | N2 wx, N2 wy => f2 wx wy
+ | N2 wx, N3 wy => f3 (extend1 w1 wx) wy
+ | N2 wx, N4 wy => f4 (extend2 w1 wx) wy
+ | N2 wx, N5 wy => f5 (extend3 w1 wx) wy
+ | N2 wx, N6 wy => f6 (extend4 w1 wx) wy
+ | N2 wx, N7 wy => f7 (extend5 w1 wx) wy
+ | N2 wx, N8 wy => f8 (extend6 w1 wx) wy
+ | N2 wx, N9 wy => f9 (extend7 w1 wx) wy
+ | N2 wx, N10 wy => f10 (extend8 w1 wx) wy
+ | N2 wx, N11 wy => f11 (extend9 w1 wx) wy
+ | N2 wx, N12 wy => f12 (extend10 w1 wx) wy
+ | N2 wx, Nn n wy => fn n (extend n w12 (extend11 w1 wx)) wy
+ | N3 wx, N0 wy =>
+ f3 wx (extend2 w0 (WW w_0 wy))
+ | N3 wx, N1 wy => f3 wx (extend2 w0 wy)
+ | N3 wx, N2 wy => f3 wx (extend1 w1 wy)
+ | N3 wx, N3 wy => f3 wx wy
+ | N3 wx, N4 wy => f4 (extend1 w2 wx) wy
+ | N3 wx, N5 wy => f5 (extend2 w2 wx) wy
+ | N3 wx, N6 wy => f6 (extend3 w2 wx) wy
+ | N3 wx, N7 wy => f7 (extend4 w2 wx) wy
+ | N3 wx, N8 wy => f8 (extend5 w2 wx) wy
+ | N3 wx, N9 wy => f9 (extend6 w2 wx) wy
+ | N3 wx, N10 wy => f10 (extend7 w2 wx) wy
+ | N3 wx, N11 wy => f11 (extend8 w2 wx) wy
+ | N3 wx, N12 wy => f12 (extend9 w2 wx) wy
+ | N3 wx, Nn n wy => fn n (extend n w12 (extend10 w2 wx)) wy
+ | N4 wx, N0 wy =>
+ f4 wx (extend3 w0 (WW w_0 wy))
+ | N4 wx, N1 wy => f4 wx (extend3 w0 wy)
+ | N4 wx, N2 wy => f4 wx (extend2 w1 wy)
+ | N4 wx, N3 wy => f4 wx (extend1 w2 wy)
+ | N4 wx, N4 wy => f4 wx wy
+ | N4 wx, N5 wy => f5 (extend1 w3 wx) wy
+ | N4 wx, N6 wy => f6 (extend2 w3 wx) wy
+ | N4 wx, N7 wy => f7 (extend3 w3 wx) wy
+ | N4 wx, N8 wy => f8 (extend4 w3 wx) wy
+ | N4 wx, N9 wy => f9 (extend5 w3 wx) wy
+ | N4 wx, N10 wy => f10 (extend6 w3 wx) wy
+ | N4 wx, N11 wy => f11 (extend7 w3 wx) wy
+ | N4 wx, N12 wy => f12 (extend8 w3 wx) wy
+ | N4 wx, Nn n wy => fn n (extend n w12 (extend9 w3 wx)) wy
+ | N5 wx, N0 wy =>
+ f5 wx (extend4 w0 (WW w_0 wy))
+ | N5 wx, N1 wy => f5 wx (extend4 w0 wy)
+ | N5 wx, N2 wy => f5 wx (extend3 w1 wy)
+ | N5 wx, N3 wy => f5 wx (extend2 w2 wy)
+ | N5 wx, N4 wy => f5 wx (extend1 w3 wy)
+ | N5 wx, N5 wy => f5 wx wy
+ | N5 wx, N6 wy => f6 (extend1 w4 wx) wy
+ | N5 wx, N7 wy => f7 (extend2 w4 wx) wy
+ | N5 wx, N8 wy => f8 (extend3 w4 wx) wy
+ | N5 wx, N9 wy => f9 (extend4 w4 wx) wy
+ | N5 wx, N10 wy => f10 (extend5 w4 wx) wy
+ | N5 wx, N11 wy => f11 (extend6 w4 wx) wy
+ | N5 wx, N12 wy => f12 (extend7 w4 wx) wy
+ | N5 wx, Nn n wy => fn n (extend n w12 (extend8 w4 wx)) wy
+ | N6 wx, N0 wy =>
+ f6 wx (extend5 w0 (WW w_0 wy))
+ | N6 wx, N1 wy => f6 wx (extend5 w0 wy)
+ | N6 wx, N2 wy => f6 wx (extend4 w1 wy)
+ | N6 wx, N3 wy => f6 wx (extend3 w2 wy)
+ | N6 wx, N4 wy => f6 wx (extend2 w3 wy)
+ | N6 wx, N5 wy => f6 wx (extend1 w4 wy)
+ | N6 wx, N6 wy => f6 wx wy
+ | N6 wx, N7 wy => f7 (extend1 w5 wx) wy
+ | N6 wx, N8 wy => f8 (extend2 w5 wx) wy
+ | N6 wx, N9 wy => f9 (extend3 w5 wx) wy
+ | N6 wx, N10 wy => f10 (extend4 w5 wx) wy
+ | N6 wx, N11 wy => f11 (extend5 w5 wx) wy
+ | N6 wx, N12 wy => f12 (extend6 w5 wx) wy
+ | N6 wx, Nn n wy => fn n (extend n w12 (extend7 w5 wx)) wy
+ | N7 wx, N0 wy =>
+ f7 wx (extend6 w0 (WW w_0 wy))
+ | N7 wx, N1 wy => f7 wx (extend6 w0 wy)
+ | N7 wx, N2 wy => f7 wx (extend5 w1 wy)
+ | N7 wx, N3 wy => f7 wx (extend4 w2 wy)
+ | N7 wx, N4 wy => f7 wx (extend3 w3 wy)
+ | N7 wx, N5 wy => f7 wx (extend2 w4 wy)
+ | N7 wx, N6 wy => f7 wx (extend1 w5 wy)
+ | N7 wx, N7 wy => f7 wx wy
+ | N7 wx, N8 wy => f8 (extend1 w6 wx) wy
+ | N7 wx, N9 wy => f9 (extend2 w6 wx) wy
+ | N7 wx, N10 wy => f10 (extend3 w6 wx) wy
+ | N7 wx, N11 wy => f11 (extend4 w6 wx) wy
+ | N7 wx, N12 wy => f12 (extend5 w6 wx) wy
+ | N7 wx, Nn n wy => fn n (extend n w12 (extend6 w6 wx)) wy
+ | N8 wx, N0 wy =>
+ f8 wx (extend7 w0 (WW w_0 wy))
+ | N8 wx, N1 wy => f8 wx (extend7 w0 wy)
+ | N8 wx, N2 wy => f8 wx (extend6 w1 wy)
+ | N8 wx, N3 wy => f8 wx (extend5 w2 wy)
+ | N8 wx, N4 wy => f8 wx (extend4 w3 wy)
+ | N8 wx, N5 wy => f8 wx (extend3 w4 wy)
+ | N8 wx, N6 wy => f8 wx (extend2 w5 wy)
+ | N8 wx, N7 wy => f8 wx (extend1 w6 wy)
+ | N8 wx, N8 wy => f8 wx wy
+ | N8 wx, N9 wy => f9 (extend1 w7 wx) wy
+ | N8 wx, N10 wy => f10 (extend2 w7 wx) wy
+ | N8 wx, N11 wy => f11 (extend3 w7 wx) wy
+ | N8 wx, N12 wy => f12 (extend4 w7 wx) wy
+ | N8 wx, Nn n wy => fn n (extend n w12 (extend5 w7 wx)) wy
+ | N9 wx, N0 wy =>
+ f9 wx (extend8 w0 (WW w_0 wy))
+ | N9 wx, N1 wy => f9 wx (extend8 w0 wy)
+ | N9 wx, N2 wy => f9 wx (extend7 w1 wy)
+ | N9 wx, N3 wy => f9 wx (extend6 w2 wy)
+ | N9 wx, N4 wy => f9 wx (extend5 w3 wy)
+ | N9 wx, N5 wy => f9 wx (extend4 w4 wy)
+ | N9 wx, N6 wy => f9 wx (extend3 w5 wy)
+ | N9 wx, N7 wy => f9 wx (extend2 w6 wy)
+ | N9 wx, N8 wy => f9 wx (extend1 w7 wy)
+ | N9 wx, N9 wy => f9 wx wy
+ | N9 wx, N10 wy => f10 (extend1 w8 wx) wy
+ | N9 wx, N11 wy => f11 (extend2 w8 wx) wy
+ | N9 wx, N12 wy => f12 (extend3 w8 wx) wy
+ | N9 wx, Nn n wy => fn n (extend n w12 (extend4 w8 wx)) wy
+ | N10 wx, N0 wy =>
+ f10 wx (extend9 w0 (WW w_0 wy))
+ | N10 wx, N1 wy => f10 wx (extend9 w0 wy)
+ | N10 wx, N2 wy => f10 wx (extend8 w1 wy)
+ | N10 wx, N3 wy => f10 wx (extend7 w2 wy)
+ | N10 wx, N4 wy => f10 wx (extend6 w3 wy)
+ | N10 wx, N5 wy => f10 wx (extend5 w4 wy)
+ | N10 wx, N6 wy => f10 wx (extend4 w5 wy)
+ | N10 wx, N7 wy => f10 wx (extend3 w6 wy)
+ | N10 wx, N8 wy => f10 wx (extend2 w7 wy)
+ | N10 wx, N9 wy => f10 wx (extend1 w8 wy)
+ | N10 wx, N10 wy => f10 wx wy
+ | N10 wx, N11 wy => f11 (extend1 w9 wx) wy
+ | N10 wx, N12 wy => f12 (extend2 w9 wx) wy
+ | N10 wx, Nn n wy => fn n (extend n w12 (extend3 w9 wx)) wy
+ | N11 wx, N0 wy =>
+ f11 wx (extend10 w0 (WW w_0 wy))
+ | N11 wx, N1 wy => f11 wx (extend10 w0 wy)
+ | N11 wx, N2 wy => f11 wx (extend9 w1 wy)
+ | N11 wx, N3 wy => f11 wx (extend8 w2 wy)
+ | N11 wx, N4 wy => f11 wx (extend7 w3 wy)
+ | N11 wx, N5 wy => f11 wx (extend6 w4 wy)
+ | N11 wx, N6 wy => f11 wx (extend5 w5 wy)
+ | N11 wx, N7 wy => f11 wx (extend4 w6 wy)
+ | N11 wx, N8 wy => f11 wx (extend3 w7 wy)
+ | N11 wx, N9 wy => f11 wx (extend2 w8 wy)
+ | N11 wx, N10 wy => f11 wx (extend1 w9 wy)
+ | N11 wx, N11 wy => f11 wx wy
+ | N11 wx, N12 wy => f12 (extend1 w10 wx) wy
+ | N11 wx, Nn n wy => fn n (extend n w12 (extend2 w10 wx)) wy
+ | N12 wx, N0 wy =>
+ f12 wx (extend11 w0 (WW w_0 wy))
+ | N12 wx, N1 wy => f12 wx (extend11 w0 wy)
+ | N12 wx, N2 wy => f12 wx (extend10 w1 wy)
+ | N12 wx, N3 wy => f12 wx (extend9 w2 wy)
+ | N12 wx, N4 wy => f12 wx (extend8 w3 wy)
+ | N12 wx, N5 wy => f12 wx (extend7 w4 wy)
+ | N12 wx, N6 wy => f12 wx (extend6 w5 wy)
+ | N12 wx, N7 wy => f12 wx (extend5 w6 wy)
+ | N12 wx, N8 wy => f12 wx (extend4 w7 wy)
+ | N12 wx, N9 wy => f12 wx (extend3 w8 wy)
+ | N12 wx, N10 wy => f12 wx (extend2 w9 wy)
+ | N12 wx, N11 wy => f12 wx (extend1 w10 wy)
+ | N12 wx, N12 wy => f12 wx wy
+ | N12 wx, Nn n wy => fn n (extend n w12 (extend1 w11 wx)) wy
+ | Nn n wx, N0 wy =>
+ fn n wx (extend n w12 (extend12 w0 (WW w_0 wy)))
+ | Nn n wx, N1 wy => fn n wx (extend n w12 (extend12 w0 wy))
+ | Nn n wx, N2 wy => fn n wx (extend n w12 (extend11 w1 wy))
+ | Nn n wx, N3 wy => fn n wx (extend n w12 (extend10 w2 wy))
+ | Nn n wx, N4 wy => fn n wx (extend n w12 (extend9 w3 wy))
+ | Nn n wx, N5 wy => fn n wx (extend n w12 (extend8 w4 wy))
+ | Nn n wx, N6 wy => fn n wx (extend n w12 (extend7 w5 wy))
+ | Nn n wx, N7 wy => fn n wx (extend n w12 (extend6 w6 wy))
+ | Nn n wx, N8 wy => fn n wx (extend n w12 (extend5 w7 wy))
+ | Nn n wx, N9 wy => fn n wx (extend n w12 (extend4 w8 wy))
+ | Nn n wx, N10 wy => fn n wx (extend n w12 (extend3 w9 wy))
+ | Nn n wx, N11 wy => fn n wx (extend n w12 (extend2 w10 wy))
+ | Nn n wx, N12 wy => fn n wx (extend n w12 (extend1 w11 wy))
+ | Nn n wx, Nn m wy =>
+ match extend_to_max w12 n m wx wy with
+ | inl wx' => fn m wx' wy
+ | inr wy' => fn n wx wy'
+ end
+ end.
+
+ Definition shiftr0 n x := w0_op.(znz_add_mul_div) (w0_op.(znz_sub) w0_op.(znz_zdigits) n) w0_op.(znz_0) x.
+ Definition shiftr1 n x := w1_op.(znz_add_mul_div) (w1_op.(znz_sub) w1_op.(znz_zdigits) n) w1_op.(znz_0) x.
+ Definition shiftr2 n x := w2_op.(znz_add_mul_div) (w2_op.(znz_sub) w2_op.(znz_zdigits) n) w2_op.(znz_0) x.
+ Definition shiftr3 n x := w3_op.(znz_add_mul_div) (w3_op.(znz_sub) w3_op.(znz_zdigits) n) w3_op.(znz_0) x.
+ Definition shiftr4 n x := w4_op.(znz_add_mul_div) (w4_op.(znz_sub) w4_op.(znz_zdigits) n) w4_op.(znz_0) x.
+ Definition shiftr5 n x := w5_op.(znz_add_mul_div) (w5_op.(znz_sub) w5_op.(znz_zdigits) n) w5_op.(znz_0) x.
+ Definition shiftr6 n x := w6_op.(znz_add_mul_div) (w6_op.(znz_sub) w6_op.(znz_zdigits) n) w6_op.(znz_0) x.
+ Definition shiftr7 n x := w7_op.(znz_add_mul_div) (w7_op.(znz_sub) w7_op.(znz_zdigits) n) w7_op.(znz_0) x.
+ Definition shiftr8 n x := w8_op.(znz_add_mul_div) (w8_op.(znz_sub) w8_op.(znz_zdigits) n) w8_op.(znz_0) x.
+ Definition shiftr9 n x := w9_op.(znz_add_mul_div) (w9_op.(znz_sub) w9_op.(znz_zdigits) n) w9_op.(znz_0) x.
+ Definition shiftr10 n x := w10_op.(znz_add_mul_div) (w10_op.(znz_sub) w10_op.(znz_zdigits) n) w10_op.(znz_0) x.
+ Definition shiftr11 n x := w11_op.(znz_add_mul_div) (w11_op.(znz_sub) w11_op.(znz_zdigits) n) w11_op.(znz_0) x.
+ Definition shiftr12 n x := w12_op.(znz_add_mul_div) (w12_op.(znz_sub) w12_op.(znz_zdigits) n) w12_op.(znz_0) x.
+ Definition shiftrn n p x := (make_op n).(znz_add_mul_div) ((make_op n).(znz_sub) (make_op n).(znz_zdigits) p) (make_op n).(znz_0) x.
+
+ Definition shiftr :=
+ Eval lazy beta delta [level] in
+ level (fun n x => N0 (shiftr0 n x))
+ (fun n x => reduce_1 (shiftr1 n x))
+ (fun n x => reduce_2 (shiftr2 n x))
+ (fun n x => reduce_3 (shiftr3 n x))
+ (fun n x => reduce_4 (shiftr4 n x))
+ (fun n x => reduce_5 (shiftr5 n x))
+ (fun n x => reduce_6 (shiftr6 n x))
+ (fun n x => reduce_7 (shiftr7 n x))
+ (fun n x => reduce_8 (shiftr8 n x))
+ (fun n x => reduce_9 (shiftr9 n x))
+ (fun n x => reduce_10 (shiftr10 n x))
+ (fun n x => reduce_11 (shiftr11 n x))
+ (fun n x => reduce_12 (shiftr12 n x))
+ (fun n p x => reduce_n n (shiftrn n p x)).
+
+ Definition safe_shiftr n x :=
+ match compare n (Ndigits x) with
+ | Lt => shiftr n x
+ | _ => N0 w_0
+ end.
+
+ Definition shiftl0 n x := w0_op.(znz_add_mul_div) n x w0_op.(znz_0).
+ Definition shiftl1 n x := w1_op.(znz_add_mul_div) n x w1_op.(znz_0).
+ Definition shiftl2 n x := w2_op.(znz_add_mul_div) n x w2_op.(znz_0).
+ Definition shiftl3 n x := w3_op.(znz_add_mul_div) n x w3_op.(znz_0).
+ Definition shiftl4 n x := w4_op.(znz_add_mul_div) n x w4_op.(znz_0).
+ Definition shiftl5 n x := w5_op.(znz_add_mul_div) n x w5_op.(znz_0).
+ Definition shiftl6 n x := w6_op.(znz_add_mul_div) n x w6_op.(znz_0).
+ Definition shiftl7 n x := w7_op.(znz_add_mul_div) n x w7_op.(znz_0).
+ Definition shiftl8 n x := w8_op.(znz_add_mul_div) n x w8_op.(znz_0).
+ Definition shiftl9 n x := w9_op.(znz_add_mul_div) n x w9_op.(znz_0).
+ Definition shiftl10 n x := w10_op.(znz_add_mul_div) n x w10_op.(znz_0).
+ Definition shiftl11 n x := w11_op.(znz_add_mul_div) n x w11_op.(znz_0).
+ Definition shiftl12 n x := w12_op.(znz_add_mul_div) n x w12_op.(znz_0).
+ Definition shiftln n p x := (make_op n).(znz_add_mul_div) p x (make_op n).(znz_0).
+ Definition shiftl :=
+ Eval lazy beta delta [level] in
+ level (fun n x => N0 (shiftl0 n x))
+ (fun n x => reduce_1 (shiftl1 n x))
+ (fun n x => reduce_2 (shiftl2 n x))
+ (fun n x => reduce_3 (shiftl3 n x))
+ (fun n x => reduce_4 (shiftl4 n x))
+ (fun n x => reduce_5 (shiftl5 n x))
+ (fun n x => reduce_6 (shiftl6 n x))
+ (fun n x => reduce_7 (shiftl7 n x))
+ (fun n x => reduce_8 (shiftl8 n x))
+ (fun n x => reduce_9 (shiftl9 n x))
+ (fun n x => reduce_10 (shiftl10 n x))
+ (fun n x => reduce_11 (shiftl11 n x))
+ (fun n x => reduce_12 (shiftl12 n x))
+ (fun n p x => reduce_n n (shiftln n p x)).
+
+
+ Definition double_size w := match w with
+ | N0 w=> N1 (WW w_0 w)
+ | N1 w=> N2 (extend1 _ w)
+ | N2 w=> N3 (extend1 _ w)
+ | N3 w=> N4 (extend1 _ w)
+ | N4 w=> N5 (extend1 _ w)
+ | N5 w=> N6 (extend1 _ w)
+ | N6 w=> N7 (extend1 _ w)
+ | N7 w=> N8 (extend1 _ w)
+ | N8 w=> N9 (extend1 _ w)
+ | N9 w=> N10 (extend1 _ w)
+ | N10 w=> N11 (extend1 _ w)
+ | N11 w=> N12 (extend1 _ w)
+ | N12 w=> Nn 0 (extend1 _ w)
+ | Nn n w=> Nn (S n) (extend1 _ w)
+ end.
+
+ Section itert.
+ Variable A: Set.
+ Variable f: A -> A.
+ Variable g: A -> A.
+ Variable t: A -> bool.
+ Fixpoint itert p x :=
+ if t x then g x else
+ match p with xH => x | xO p1 => itert p1 (f x) | xI p1 => itert p1 (f x) end.
+ End itert.
+
+ Definition safe_shiftl n x :=
+ itert _ double_size (shiftl n)
+ (fun x => match compare n (head0 x) with Gt => false | _ => true end)
+ (digits x) x.
+
+ Definition is_even x :=
+ match x with
+ | N0 wx => w0_op.(znz_is_even) wx
+ | N1 wx => w1_op.(znz_is_even) wx
+ | N2 wx => w2_op.(znz_is_even) wx
+ | N3 wx => w3_op.(znz_is_even) wx
+ | N4 wx => w4_op.(znz_is_even) wx
+ | N5 wx => w5_op.(znz_is_even) wx
+ | N6 wx => w6_op.(znz_is_even) wx
+ | N7 wx => w7_op.(znz_is_even) wx
+ | N8 wx => w8_op.(znz_is_even) wx
+ | N9 wx => w9_op.(znz_is_even) wx
+ | N10 wx => w10_op.(znz_is_even) wx
+ | N11 wx => w11_op.(znz_is_even) wx
+ | N12 wx => w12_op.(znz_is_even) wx
+ | Nn n wx => (make_op n).(znz_is_even) wx
+ end.
+
End Make.
diff --git a/theories/Ints/num/genN.ml b/theories/Ints/num/genN.ml
index 43e7719726..083e3213e2 100644
--- a/theories/Ints/num/genN.ml
+++ b/theories/Ints/num/genN.ml
@@ -812,6 +812,159 @@ let print_Make () =
fprintf fmt "\n";
+ (* Head0 *)
+ fprintf fmt " Definition head0 w := match w with\n";
+ for i = 0 to size do
+ fprintf fmt " | %s%i w=> %s%i (w%i_op.(znz_head0) w)\n" c i c i i;
+ done;
+ fprintf fmt " | %sn n w=> %sn n ((make_op n).(znz_head0) w)\n" c c;
+ fprintf fmt " end.\n";
+ fprintf fmt "\n";
+
+ (* Tail0 *)
+ fprintf fmt " Definition tail0 w := match w with\n";
+ for i = 0 to size do
+ fprintf fmt " | %s%i w=> %s%i (w%i_op.(znz_tail0) w)\n" c i c i i;
+ done;
+ fprintf fmt " | %sn n w=> %sn n ((make_op n).(znz_tail0) w)\n" c c;
+ fprintf fmt " end.\n";
+ fprintf fmt "\n";
+
+ (* Number of digits *)
+ fprintf fmt " Definition %sdigits x :=\n" c;
+ fprintf fmt " match x with\n";
+ fprintf fmt " | %s0 _ => N0 w0_op.(znz_zdigits)\n" c;
+ for i = 1 to size do
+ fprintf fmt " | %s%i _ => reduce_%i w%i_op.(znz_zdigits)\n" c i i i;
+ done;
+ fprintf fmt " | %sn n _ => reduce_n n (make_op n).(znz_zdigits)\n \n" c;
+ fprintf fmt " end.\n";
+ fprintf fmt "\n";
+
+
+ fprintf fmt " Definition level ";
+ for i = 0 to size do
+ fprintf fmt "f%i " i;
+ done;
+ fprintf fmt " fn x y: %s_ := match x, y with\n" t;
+ fprintf fmt " | %s0 wx, %s0 wy => f0 wx wy \n" c c;
+ for j = 1 to size do
+ fprintf fmt " | %s0 wx, %s%i wy => f%i " c c j j;
+ if j = 1 then fprintf fmt "(WW w_0 wx) wy\n"
+ else fprintf fmt "(extend%i w0 (WW w_0 wx)) wy\n" (j-1)
+ done;
+ fprintf fmt " | %s0 wx, %sn n wy =>\n" c c;
+ fprintf fmt " fn n (extend n w%i (extend%i w0 (WW w_0 wx))) wy\n"
+ size size;
+ for i = 1 to size do
+ fprintf fmt " | %s%i wx, %s0 wy =>\n" c i c;
+ fprintf fmt
+ " f%i wx " i;
+ if i = 1 then fprintf fmt "(WW w_0 wy)\n"
+ else fprintf fmt "(extend%i w0 (WW w_0 wy))\n" (i-1);
+ for j = 1 to size do
+ fprintf fmt " | %s%i wx, %s%i wy => " c i c j;
+ if i < j then fprintf fmt "f%i (extend%i w%i wx) wy\n" j (j-i) (i-1)
+ else if i = j then fprintf fmt "f%i wx wy\n" j
+ else fprintf fmt "f%i wx (extend%i w%i wy)\n" i (i-j) (j-1)
+ done;
+ fprintf fmt
+ " | %s%i wx, %sn n wy => fn n (extend n w%i (extend%i w%i wx)) wy\n"
+ c i c size (size-i+1) (i-1)
+ done;
+ fprintf fmt " | %sn n wx, %s0 wy =>\n" c c;
+ fprintf fmt " fn n wx (extend n w%i (extend%i w0 (WW w_0 wy)))\n"
+ size size;
+ for j = 1 to size do
+ fprintf fmt
+ " | %sn n wx, %s%i wy => fn n wx (extend n w%i (extend%i w%i wy))\n"
+ c c j size (size-j+1) (j-1);
+ done;
+ fprintf fmt " | %sn n wx, %sn m wy =>\n" c c;
+ fprintf fmt " match extend_to_max w%i n m wx wy with\n" size;
+ fprintf fmt " | inl wx' => fn m wx' wy\n";
+ fprintf fmt " | inr wy' => fn n wx wy'\n";
+ fprintf fmt " end\n";
+ fprintf fmt " end.\n";
+ fprintf fmt "\n";
+
+ (* Shiftr *)
+ for i = 0 to size do
+ fprintf fmt " Definition shiftr%i n x := w%i_op.(znz_add_mul_div) (w%i_op.(znz_sub) w%i_op.(znz_zdigits) n) w%i_op.(znz_0) x.\n" i i i i i;
+ done;
+ fprintf fmt " Definition shiftrn n p x := (make_op n).(znz_add_mul_div) ((make_op n).(znz_sub) (make_op n).(znz_zdigits) p) (make_op n).(znz_0) x.\n";
+ fprintf fmt "\n";
+
+ fprintf fmt " Definition shiftr := \n";
+ fprintf fmt " Eval lazy beta delta [level] in \n";
+ fprintf fmt " level (fun n x => %s0 (shiftr0 n x))\n" c;
+ for i = 1 to size do
+ fprintf fmt " (fun n x => reduce_%i (shiftr%i n x))\n" i i;
+ done;
+ fprintf fmt " (fun n p x => reduce_n n (shiftrn n p x)).\n";
+ fprintf fmt "\n";
+
+
+ fprintf fmt " Definition safe_shiftr n x := \n";
+ fprintf fmt " match compare n (Ndigits x) with\n ";
+ fprintf fmt " | Lt => shiftr n x \n";
+ fprintf fmt " | _ => N0 w_0\n";
+ fprintf fmt " end.\n";
+ fprintf fmt "\n";
+
+ (* Shiftl *)
+ for i = 0 to size do
+ fprintf fmt " Definition shiftl%i n x := w%i_op.(znz_add_mul_div) n x w%i_op.(znz_0).\n" i i i
+ done;
+ fprintf fmt " Definition shiftln n p x := (make_op n).(znz_add_mul_div) p x (make_op n).(znz_0).\n";
+ fprintf fmt " Definition shiftl := \n";
+ fprintf fmt " Eval lazy beta delta [level] in \n";
+ fprintf fmt " level (fun n x => %s0 (shiftl0 n x))\n" c;
+ for i = 1 to size do
+ fprintf fmt " (fun n x => reduce_%i (shiftl%i n x))\n" i i;
+ done;
+ fprintf fmt " (fun n p x => reduce_n n (shiftln n p x)).\n";
+ fprintf fmt "\n";
+ fprintf fmt "\n";
+
+ (* Double size *)
+ fprintf fmt " Definition double_size w := match w with\n";
+ fprintf fmt " | N0 w=> N1 (WW w_0 w)\n";
+ for i = 1 to size-1 do
+ fprintf fmt " | N%i w=> N%i (extend1 _ w)\n" i (i + 1);
+ done;
+ fprintf fmt " | N%i w=> Nn 0 (extend1 _ w)\n" size ;
+ fprintf fmt " | Nn n w=> Nn (S n) (extend1 _ w)\n";
+ fprintf fmt " end.\n";
+ fprintf fmt "\n";
+
+ (* Safe shiftl *)
+ fprintf fmt " Section itert. \n";
+ fprintf fmt " Variable A: Set.\n";
+ fprintf fmt " Variable f: A -> A.\n";
+ fprintf fmt " Variable g: A -> A.\n";
+ fprintf fmt " Variable t: A -> bool.\n";
+ fprintf fmt " Fixpoint itert p x :=\n";
+ fprintf fmt " if t x then g x else\n ";
+ fprintf fmt " match p with xH => x | xO p1 => itert p1 (f x) | xI p1 => itert p1 (f x) end.\n";
+ fprintf fmt " End itert.\n";
+ fprintf fmt "\n";
+ fprintf fmt " Definition safe_shiftl n x :=\n";
+ fprintf fmt " itert _ double_size (shiftl n) \n";
+ fprintf fmt " (fun x => match compare n (head0 x) with Gt => false | _ => true end) \n";
+ fprintf fmt " (digits x) x.\n ";
+ fprintf fmt "\n";
+
+ (* even *)
+ fprintf fmt " Definition is_even x :=\n";
+ fprintf fmt " match x with\n";
+ for i = 0 to size do
+ fprintf fmt " | %s%i wx => w%i_op.(znz_is_even) wx\n" c i i
+ done;
+ fprintf fmt " | %sn n wx => (make_op n).(znz_is_even) wx\n" c;
+ fprintf fmt " end.\n";
+ fprintf fmt "\n";
+
fprintf fmt "End Make.\n";
fprintf fmt "\n";
pp_print_flush fmt ()