aboutsummaryrefslogtreecommitdiff
path: root/src/nbe_rewrite_head.out
diff options
context:
space:
mode:
Diffstat (limited to 'src/nbe_rewrite_head.out')
-rw-r--r--src/nbe_rewrite_head.out1119
1 files changed, 660 insertions, 459 deletions
diff --git a/src/nbe_rewrite_head.out b/src/nbe_rewrite_head.out
index 3c94cc019..a6b62f776 100644
--- a/src/nbe_rewrite_head.out
+++ b/src/nbe_rewrite_head.out
@@ -7,17 +7,18 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
| @expr.Ident _ _ _ t idc =>
args <- invert_bind_args idc Raw.ident.Literal;
match pattern.type.unify_extracted ℕ (projT1 args) with
- | Some _ =>
+ | Datatypes.Some _ =>
if type.type_beq base.type base.type.type_beq ℕ (projT1 args)
then
xv <- ident.unify pattern.ident.Literal ##(projT2 args);
- Some (Base (##(Nat.succ (let (x0, _) := xv in x0)))%expr)
- else None
- | None => None
+ Datatypes.Some
+ (Base (##(Nat.succ (let (x0, _) := xv in x0)))%expr)
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end;;
- None);;;
+ Datatypes.None);;;
Base (#(Nat_succ)%expr @ x)%expr_pat)%option
| Nat_pred =>
fun x : expr ℕ =>
@@ -25,17 +26,18 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
| @expr.Ident _ _ _ t idc =>
args <- invert_bind_args idc Raw.ident.Literal;
match pattern.type.unify_extracted ℕ (projT1 args) with
- | Some _ =>
+ | Datatypes.Some _ =>
if type.type_beq base.type base.type.type_beq ℕ (projT1 args)
then
xv <- ident.unify pattern.ident.Literal ##(projT2 args);
- Some (Base (##(Nat.pred (let (x0, _) := xv in x0)))%expr)
- else None
- | None => None
+ Datatypes.Some
+ (Base (##(Nat.pred (let (x0, _) := xv in x0)))%expr)
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end;;
- None);;;
+ Datatypes.None);;;
Base (#(Nat_pred)%expr @ x)%expr_pat)%option
| Nat_max =>
fun x x0 : expr ℕ =>
@@ -49,25 +51,25 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
pattern.type.unify_extracted (ℕ -> ℕ)%ptype
((projT1 args0) -> (projT1 args))%ptype
with
- | Some (_, _)%zrange =>
+ | Datatypes.Some (_, _)%zrange =>
if
type.type_beq base.type base.type.type_beq (ℕ -> ℕ)%ptype
((projT1 args0) -> (projT1 args))%ptype
then
xv <- ident.unify pattern.ident.Literal ##(projT2 args0);
xv0 <- ident.unify pattern.ident.Literal ##(projT2 args);
- Some
+ Datatypes.Some
(Base
(##(Nat.max (let (x1, _) := xv in x1)
(let (x1, _) := xv0 in x1)))%expr)
- else None
- | None => None
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end;;
- None);;;
+ Datatypes.None);;;
Base (#(Nat_max)%expr @ x @ x0)%expr_pat)%option
| Nat_mul =>
fun x x0 : expr ℕ =>
@@ -81,25 +83,25 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
pattern.type.unify_extracted (ℕ -> ℕ)%ptype
((projT1 args0) -> (projT1 args))%ptype
with
- | Some (_, _)%zrange =>
+ | Datatypes.Some (_, _)%zrange =>
if
type.type_beq base.type base.type.type_beq (ℕ -> ℕ)%ptype
((projT1 args0) -> (projT1 args))%ptype
then
xv <- ident.unify pattern.ident.Literal ##(projT2 args0);
xv0 <- ident.unify pattern.ident.Literal ##(projT2 args);
- Some
+ Datatypes.Some
(Base
(##((let (x1, _) := xv in x1) *
(let (x1, _) := xv0 in x1))%nat)%expr)
- else None
- | None => None
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end;;
- None);;;
+ Datatypes.None);;;
Base (#(Nat_mul)%expr @ x @ x0)%expr_pat)%option
| Nat_add =>
fun x x0 : expr ℕ =>
@@ -113,25 +115,25 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
pattern.type.unify_extracted (ℕ -> ℕ)%ptype
((projT1 args0) -> (projT1 args))%ptype
with
- | Some (_, _)%zrange =>
+ | Datatypes.Some (_, _)%zrange =>
if
type.type_beq base.type base.type.type_beq (ℕ -> ℕ)%ptype
((projT1 args0) -> (projT1 args))%ptype
then
xv <- ident.unify pattern.ident.Literal ##(projT2 args0);
xv0 <- ident.unify pattern.ident.Literal ##(projT2 args);
- Some
+ Datatypes.Some
(Base
(##((let (x1, _) := xv in x1) +
(let (x1, _) := xv0 in x1))%nat)%expr)
- else None
- | None => None
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end;;
- None);;;
+ Datatypes.None);;;
Base (#(Nat_add)%expr @ x @ x0)%expr_pat)%option
| Nat_sub =>
fun x x0 : expr ℕ =>
@@ -145,25 +147,25 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
pattern.type.unify_extracted (ℕ -> ℕ)%ptype
((projT1 args0) -> (projT1 args))%ptype
with
- | Some (_, _)%zrange =>
+ | Datatypes.Some (_, _)%zrange =>
if
type.type_beq base.type base.type.type_beq (ℕ -> ℕ)%ptype
((projT1 args0) -> (projT1 args))%ptype
then
xv <- ident.unify pattern.ident.Literal ##(projT2 args0);
xv0 <- ident.unify pattern.ident.Literal ##(projT2 args);
- Some
+ Datatypes.Some
(Base
(##((let (x1, _) := xv in x1) -
(let (x1, _) := xv0 in x1))%nat)%expr)
- else None
- | None => None
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end;;
- None);;;
+ Datatypes.None);;;
Base (#(Nat_sub)%expr @ x @ x0)%expr_pat)%option
| Nat_eqb =>
fun x x0 : expr ℕ =>
@@ -177,25 +179,25 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
pattern.type.unify_extracted (ℕ -> ℕ)%ptype
((projT1 args0) -> (projT1 args))%ptype
with
- | Some (_, _)%zrange =>
+ | Datatypes.Some (_, _)%zrange =>
if
type.type_beq base.type base.type.type_beq (ℕ -> ℕ)%ptype
((projT1 args0) -> (projT1 args))%ptype
then
xv <- ident.unify pattern.ident.Literal ##(projT2 args0);
xv0 <- ident.unify pattern.ident.Literal ##(projT2 args);
- Some
+ Datatypes.Some
(Base
(##((let (x1, _) := xv in x1) =?
(let (x1, _) := xv0 in x1))%nat)%expr)
- else None
- | None => None
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end;;
- None);;;
+ Datatypes.None);;;
Base (#(Nat_eqb)%expr @ x @ x0)%expr_pat)%option
| @nil t => Base []%expr_pat
| @cons t => fun (x : expr t) (x0 : expr (list t)) => Base (x :: x0)%expr_pat
@@ -217,7 +219,7 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
((let (x2, _) := args in x2) * (let (_, y) := args in y))%etype) ->
s0) -> s)%ptype
with
- | Some (_, _, _, (_, (_, (_, _)), b3, b2))%zrange =>
+ | Datatypes.Some (_, _, _, (_, (_, (_, _)), b3, b2))%zrange =>
if
type.type_beq base.type base.type.type_beq
(((b3 * b2)%etype -> b3) ->
@@ -236,21 +238,22 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
_ <- base.try_make_transport_cps b2 b2;
v3 <- base.try_make_transport_cps b3 A;
v4 <- base.try_make_transport_cps A A;
- Some (Base (v4 (v3 (v1 (v (Compile.reflect x1))))))
- else None
- | None => None
+ Datatypes.Some (Base (v4 (v3 (v1 (v (Compile.reflect x1))))))
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end
| @expr.App _ _ _ s _ (@expr.App _ _ _ s0 _ ($_)%expr _) _ | @expr.App
_ _ _ s _ (@expr.App _ _ _ s0 _ (@expr.Abs _ _ _ _ _ _) _) _ |
@expr.App _ _ _ s _ (@expr.App _ _ _ s0 _ (_ @ _)%expr_pat _) _ |
@expr.App _ _ _ s _
- (@expr.App _ _ _ s0 _ (@expr.LetIn _ _ _ _ _ _ _) _) _ => None
+ (@expr.App _ _ _ s0 _ (@expr.LetIn _ _ _ _ _ _ _) _) _ =>
+ Datatypes.None
| @expr.App _ _ _ s _ #(_)%expr_pat _ | @expr.App _ _ _ s _ ($_)%expr
_ | @expr.App _ _ _ s _ (@expr.Abs _ _ _ _ _ _) _ | @expr.App _ _ _ s
- _ (@expr.LetIn _ _ _ _ _ _ _) _ => None
- | _ => None
+ _ (@expr.LetIn _ _ _ _ _ _ _) _ => Datatypes.None
+ | _ => Datatypes.None
end;;
- None);;;
+ Datatypes.None);;;
Base (#(fst)%expr @ x)%expr_pat)%option
| @snd A B =>
fun x : expr (A * B)%etype =>
@@ -269,7 +272,7 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
((let (x2, _) := args in x2) * (let (_, y) := args in y))%etype) ->
s0) -> s)%ptype
with
- | Some (_, _, _, (_, (_, (_, _)), b3, b2))%zrange =>
+ | Datatypes.Some (_, _, _, (_, (_, (_, _)), b3, b2))%zrange =>
if
type.type_beq base.type base.type.type_beq
(((b3 * b2)%etype -> b2) ->
@@ -288,21 +291,22 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
v2 <- base.try_make_transport_cps b2 b2;
v3 <- base.try_make_transport_cps b2 B;
v4 <- base.try_make_transport_cps B B;
- Some (Base (v4 (v3 (v2 (v0 (Compile.reflect x0))))))
- else None
- | None => None
+ Datatypes.Some (Base (v4 (v3 (v2 (v0 (Compile.reflect x0))))))
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end
| @expr.App _ _ _ s _ (@expr.App _ _ _ s0 _ ($_)%expr _) _ | @expr.App
_ _ _ s _ (@expr.App _ _ _ s0 _ (@expr.Abs _ _ _ _ _ _) _) _ |
@expr.App _ _ _ s _ (@expr.App _ _ _ s0 _ (_ @ _)%expr_pat _) _ |
@expr.App _ _ _ s _
- (@expr.App _ _ _ s0 _ (@expr.LetIn _ _ _ _ _ _ _) _) _ => None
+ (@expr.App _ _ _ s0 _ (@expr.LetIn _ _ _ _ _ _ _) _) _ =>
+ Datatypes.None
| @expr.App _ _ _ s _ #(_)%expr_pat _ | @expr.App _ _ _ s _ ($_)%expr
_ | @expr.App _ _ _ s _ (@expr.Abs _ _ _ _ _ _) _ | @expr.App _ _ _ s
- _ (@expr.LetIn _ _ _ _ _ _ _) _ => None
- | _ => None
+ _ (@expr.LetIn _ _ _ _ _ _ _) _ => Datatypes.None
+ | _ => Datatypes.None
end;;
- None);;;
+ Datatypes.None);;;
Base (#(snd)%expr @ x)%expr_pat)%option
| @prod_rect A B T =>
fun (x : expr A -> expr B -> UnderLets (expr T))
@@ -324,7 +328,7 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
((let (x3, _) := args in x3) * (let (_, y) := args in y))%etype) ->
s0) -> s)%ptype
with
- | Some
+ | Datatypes.Some
(_, (_, _), (_, _, _), (_, (_, b7)), (_, (_, (_, _)), b9, b8))%zrange =>
if
type.type_beq base.type base.type.type_beq
@@ -351,25 +355,26 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
v2 <- base.try_make_transport_cps b8 b8;
v3 <- base.try_make_transport_cps b7 T;
v4 <- base.try_make_transport_cps T T;
- Some
+ Datatypes.Some
(fv1 <-- x'4 (x'3 (x'2 (x'1 (x'0 (x' x)))))
(v1 (v (Compile.reflect x2)))
(v2 (v0 (Compile.reflect x1)));
Base (v4 (v3 fv1)))%under_lets
- else None
- | None => None
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end
| @expr.App _ _ _ s _ (@expr.App _ _ _ s0 _ ($_)%expr _) _ | @expr.App
_ _ _ s _ (@expr.App _ _ _ s0 _ (@expr.Abs _ _ _ _ _ _) _) _ |
@expr.App _ _ _ s _ (@expr.App _ _ _ s0 _ (_ @ _)%expr_pat _) _ |
@expr.App _ _ _ s _
- (@expr.App _ _ _ s0 _ (@expr.LetIn _ _ _ _ _ _ _) _) _ => None
+ (@expr.App _ _ _ s0 _ (@expr.LetIn _ _ _ _ _ _ _) _) _ =>
+ Datatypes.None
| @expr.App _ _ _ s _ #(_)%expr_pat _ | @expr.App _ _ _ s _ ($_)%expr
_ | @expr.App _ _ _ s _ (@expr.Abs _ _ _ _ _ _) _ | @expr.App _ _ _ s
- _ (@expr.LetIn _ _ _ _ _ _ _) _ => None
- | _ => None
+ _ (@expr.LetIn _ _ _ _ _ _ _) _ => Datatypes.None
+ | _ => Datatypes.None
end;;
- None);;;
+ Datatypes.None);;;
Base
(#(prod_rect)%expr @
(λ (x1 : var A)(x2 : var B),
@@ -387,7 +392,8 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
(((((unit -> T) -> (unit -> T) -> bool -> T) -> unit -> T) ->
unit -> T) -> (projT1 args))%ptype
with
- | Some (_, _, (_, _, (_, _)), (_, _), (_, b8), _)%zrange =>
+ | Datatypes.Some
+ (_, _, (_, _, (_, _)), (_, _), (_, b8), _)%zrange =>
if
type.type_beq base.type base.type.type_beq
(((((unit -> b8) -> (unit -> b8) -> bool -> b8) ->
@@ -403,17 +409,17 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
x'2 <- base.try_make_transport_cps b8 b8;
v <- base.try_make_transport_cps b8 T;
v0 <- base.try_make_transport_cps T T;
- Some
+ Datatypes.Some
(fv0 <-- (if let (x2, _) := xv in x2
then x'1 (x' x) (##tt)%expr
else x'2 (x'0 x0) (##tt)%expr);
Base (v0 (v fv0)))%under_lets
- else None
- | None => None
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end;;
- None);;;
+ Datatypes.None);;;
Base
(#(bool_rect)%expr @ (λ x2 : var unit,
to_expr (x ($x2)))%expr @
@@ -433,7 +439,7 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
(((((unit -> P) -> (ℕ -> P -> P) -> ℕ -> P) -> unit -> P) ->
ℕ -> P -> P) -> (projT1 args))%ptype
with
- | Some
+ | Datatypes.Some
(_, _, (_, (_, _), (_, _)), (_, _), (_, (_, b10)), _)%zrange =>
if
type.type_beq base.type base.type.type_beq
@@ -452,7 +458,7 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
x'4 <- base.try_make_transport_cps b10 b10;
v <- base.try_make_transport_cps b10 P;
v0 <- base.try_make_transport_cps P P;
- Some
+ Datatypes.Some
(fv0 <-- Datatypes.nat_rect
(fun _ : nat => UnderLets (expr b10))
(x'2 (x' x) (##tt)%expr)
@@ -461,12 +467,12 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
x'4 (x'3 (x'1 (x'0 x0))) (##n')%expr rec0)
(let (x2, _) := xv in x2);
Base (v0 (v fv0)))%under_lets
- else None
- | None => None
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end;;
- None);;;
+ Datatypes.None);;;
Base
(#(nat_rect)%expr @ (λ x2 : var unit,
to_expr (x ($x2)))%expr @
@@ -490,7 +496,7 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
((((((P -> Q) -> (ℕ -> (P -> Q) -> P -> Q) -> ℕ -> P -> Q) ->
P -> Q) -> ℕ -> (P -> Q) -> P -> Q) -> (projT1 args)) -> P)%ptype
with
- | Some
+ | Datatypes.Some
(_, _, (_, (_, _, (_, _)), (_, (_, _))), (_, _),
(_, (_, _, (_, b16))), _, b)%zrange =>
if
@@ -520,7 +526,7 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
v0 <- base.try_make_transport_cps b b;
v1 <- base.try_make_transport_cps b16 Q;
v2 <- base.try_make_transport_cps Q Q;
- Some
+ Datatypes.Some
(fv0 <-- Datatypes.nat_rect
(fun _ : nat => expr b -> UnderLets (expr b16))
(x'6 (x'5 (x'0 (x' x))))
@@ -531,10 +537,10 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
(##n')%expr rec v3) (let (x3, _) := xv in x3)
(v0 (v x2));
Base (v2 (v1 fv0)))%under_lets
- else None
- | None => None
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end;;;
Base
(#(nat_rect_arrow)%expr @ (λ x3 : var P,
@@ -559,7 +565,7 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
(((((unit -> P) -> (A -> (list A) -> P -> P) -> (list A) -> P) ->
unit -> P) -> A -> (list A) -> P -> P) -> (list A))%ptype
with
- | Some
+ | Datatypes.Some
(_, _, (_, (_, (_, _)), (_, _)), (_, _), (_, (_, (_, b12))), b)%zrange =>
if
type.type_beq base.type base.type.type_beq
@@ -585,7 +591,7 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
v1 <- base.try_make_transport_cps b12 P;
v2 <- base.try_make_transport_cps P P;
fv0 <- (ls <- reflect_list (v0 (v x1));
- Some
+ Datatypes.Some
(Datatypes.list_rect
(fun _ : Datatypes.list (expr b) =>
UnderLets (expr b12)) (x'4 (x' x) (##tt)%expr)
@@ -594,12 +600,12 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
(rec' <-- rec;
x'8 (x'7 (x'6 (x'5 (x'3 (x'2 (x'1 (x'0 x0))))))) x2
(Compilers.reify_list xs) rec')%under_lets) ls));
- Some (fv1 <-- fv0;
- Base (v2 (v1 fv1)))%under_lets
- else None
- | None => None
+ Datatypes.Some (fv1 <-- fv0;
+ Base (v2 (v1 fv1)))%under_lets
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end;;
- None);;;
+ Datatypes.None);;;
Base
(#(list_rect)%expr @ (λ x2 : var unit,
to_expr (x ($x2)))%expr @
@@ -623,7 +629,7 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
(((((unit -> P) -> (A -> (list A) -> P) -> (list A) -> P) ->
unit -> P) -> A -> (list A) -> P) -> (list args))%ptype
with
- | Some
+ | Datatypes.Some
(_, _, (_, (_, _), (_, _)), (_, _), (_, (_, b10)), b)%zrange =>
if
type.type_beq base.type base.type.type_beq
@@ -645,11 +651,11 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
_ <- base.try_make_transport_cps b10 b10;
v <- base.try_make_transport_cps b10 P;
v0 <- base.try_make_transport_cps P P;
- Some
+ Datatypes.Some
(fv0 <-- x'3 (x' x) (##tt)%expr;
Base (v0 (v fv0)))%under_lets
- else None
- | None => None
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end
| @expr.App _ _ _ s _
(@expr.App _ _ _ s0 _ (@expr.Ident _ _ _ t idc) x3) x2 =>
@@ -668,7 +674,7 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
unit -> P) -> A -> (list A) -> P) ->
((args -> (list args) -> (list args)) -> s0) -> s)%ptype
with
- | Some
+ | Datatypes.Some
(_, _, (_, (_, _), (_, _)), (_, _), (_, (_, b10)),
(_, (_, _), _, b11))%zrange =>
if
@@ -697,25 +703,26 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
v2 <- base.try_make_transport_cps b11 b11;
v3 <- base.try_make_transport_cps b10 P;
v4 <- base.try_make_transport_cps P P;
- Some
+ Datatypes.Some
(fv1 <-- x'6 (x'5 (x'4 (x'2 (x'1 (x'0 x0)))))
(v1 (v (Compile.reflect x3)))
(v2 (v0 (Compile.reflect x2)));
Base (v4 (v3 fv1)))%under_lets
- else None
- | None => None
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end
| @expr.App _ _ _ s _ (@expr.App _ _ _ s0 _ ($_)%expr _) _ | @expr.App
_ _ _ s _ (@expr.App _ _ _ s0 _ (@expr.Abs _ _ _ _ _ _) _) _ |
@expr.App _ _ _ s _ (@expr.App _ _ _ s0 _ (_ @ _)%expr_pat _) _ |
@expr.App _ _ _ s _
- (@expr.App _ _ _ s0 _ (@expr.LetIn _ _ _ _ _ _ _) _) _ => None
+ (@expr.App _ _ _ s0 _ (@expr.LetIn _ _ _ _ _ _ _) _) _ =>
+ Datatypes.None
| @expr.App _ _ _ s _ #(_)%expr_pat _ | @expr.App _ _ _ s _ ($_)%expr
_ | @expr.App _ _ _ s _ (@expr.Abs _ _ _ _ _ _) _ | @expr.App _ _ _ s
- _ (@expr.LetIn _ _ _ _ _ _ _) _ => None
- | _ => None
+ _ (@expr.LetIn _ _ _ _ _ _ _) _ => Datatypes.None
+ | _ => Datatypes.None
end;;
- None);;;
+ Datatypes.None);;;
Base
(#(list_case)%expr @ (λ x2 : var unit,
to_expr (x ($x2)))%expr @
@@ -728,7 +735,7 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
(((pattern.base.type.list '1) -> ℕ) -> (pattern.base.type.list '1))%ptype
(((list T) -> ℕ) -> (list T))%ptype
with
- | Some (_, _, b)%zrange =>
+ | Datatypes.Some (_, _, b)%zrange =>
if
type.type_beq base.type base.type.type_beq
(((list b) -> ℕ) -> (list b))%ptype
@@ -738,12 +745,12 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
v <- base.try_make_transport_cps T b;
v0 <- base.try_make_transport_cps b b;
fv0 <- (x0 <- (xs <- reflect_list (v0 (v x));
- Some (##(length xs))%expr);
- Some (Base x0));
- Some (fv1 <-- fv0;
- Base fv1)%under_lets
- else None
- | None => None
+ Datatypes.Some (##(length xs))%expr);
+ Datatypes.Some (Base x0));
+ Datatypes.Some (fv1 <-- fv0;
+ Base fv1)%under_lets
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end;;;
Base (#(List_length)%expr @ x)%expr_pat)%option
| List_seq =>
@@ -758,27 +765,27 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
pattern.type.unify_extracted (ℕ -> ℕ)%ptype
((projT1 args0) -> (projT1 args))%ptype
with
- | Some (_, _)%zrange =>
+ | Datatypes.Some (_, _)%zrange =>
if
type.type_beq base.type base.type.type_beq (ℕ -> ℕ)%ptype
((projT1 args0) -> (projT1 args))%ptype
then
xv <- ident.unify pattern.ident.Literal ##(projT2 args0);
xv0 <- ident.unify pattern.ident.Literal ##(projT2 args);
- Some
+ Datatypes.Some
(Base
(Compilers.reify_list
- (map (fun v : nat => (##v)%expr)
+ (List.map (fun v : nat => (##v)%expr)
(seq (let (x1, _) := xv in x1)
(let (x1, _) := xv0 in x1)))))
- else None
- | None => None
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end;;
- None);;;
+ Datatypes.None);;;
Base (#(List_seq)%expr @ x @ x0)%expr_pat)%option
| @List_firstn A =>
fun (x : expr ℕ) (x0 : expr (list A)) =>
@@ -792,7 +799,7 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
ℕ) -> (pattern.base.type.list '1))%ptype
(((ℕ -> (list A) -> (list A)) -> (projT1 args)) -> (list A))%ptype
with
- | Some (_, (_, _), _, b)%zrange =>
+ | Datatypes.Some (_, (_, _), _, b)%zrange =>
if
type.type_beq base.type base.type.type_beq
(((ℕ -> (list b) -> (list b)) -> ℕ) -> (list b))%ptype
@@ -805,18 +812,18 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
v1 <- base.try_make_transport_cps b A;
v2 <- base.try_make_transport_cps A A;
fv0 <- (xs <- reflect_list (v0 (v x0));
- Some
+ Datatypes.Some
(Base
(Compilers.reify_list
(firstn (let (x1, _) := xv in x1) xs))));
- Some (fv1 <-- fv0;
- Base (v2 (v1 fv1)))%under_lets
- else None
- | None => None
+ Datatypes.Some (fv1 <-- fv0;
+ Base (v2 (v1 fv1)))%under_lets
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end;;
- None);;;
+ Datatypes.None);;;
Base (#(List_firstn)%expr @ x @ x0)%expr_pat)%option
| @List_skipn A =>
fun (x : expr ℕ) (x0 : expr (list A)) =>
@@ -830,7 +837,7 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
ℕ) -> (pattern.base.type.list '1))%ptype
(((ℕ -> (list A) -> (list A)) -> (projT1 args)) -> (list A))%ptype
with
- | Some (_, (_, _), _, b)%zrange =>
+ | Datatypes.Some (_, (_, _), _, b)%zrange =>
if
type.type_beq base.type base.type.type_beq
(((ℕ -> (list b) -> (list b)) -> ℕ) -> (list b))%ptype
@@ -843,18 +850,18 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
v1 <- base.try_make_transport_cps b A;
v2 <- base.try_make_transport_cps A A;
fv0 <- (xs <- reflect_list (v0 (v x0));
- Some
+ Datatypes.Some
(Base
(Compilers.reify_list
(skipn (let (x1, _) := xv in x1) xs))));
- Some (fv1 <-- fv0;
- Base (v2 (v1 fv1)))%under_lets
- else None
- | None => None
+ Datatypes.Some (fv1 <-- fv0;
+ Base (v2 (v1 fv1)))%under_lets
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end;;
- None);;;
+ Datatypes.None);;;
Base (#(List_skipn)%expr @ x @ x0)%expr_pat)%option
| @List_repeat A =>
fun (x : expr A) (x0 : expr ℕ) =>
@@ -866,7 +873,7 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
((('1%pbtype -> ℕ -> (pattern.base.type.list '1)) -> '1%pbtype) ->
ℕ)%ptype (((A -> ℕ -> (list A)) -> A) -> (projT1 args))%ptype
with
- | Some (_, (_, _), b0, _)%zrange =>
+ | Datatypes.Some (_, (_, _), b0, _)%zrange =>
if
type.type_beq base.type base.type.type_beq
(((b0 -> ℕ -> (list b0)) -> b0) -> ℕ)%ptype
@@ -878,18 +885,18 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
v0 <- base.try_make_transport_cps b0 b0;
v1 <- base.try_make_transport_cps b0 A;
v2 <- base.try_make_transport_cps A A;
- Some
+ Datatypes.Some
(Base
(v2
(v1
(Compilers.reify_list
(repeat (v0 (v x)) (let (x1, _) := xv in x1))))))
- else None
- | None => None
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end;;
- None);;;
+ Datatypes.None);;;
Base (#(List_repeat)%expr @ x @ x0)%expr_pat)%option
| @List_combine A B =>
fun (x : expr (list A)) (x0 : expr (list B)) =>
@@ -900,7 +907,7 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
(pattern.base.type.list '1)) -> (pattern.base.type.list '2))%ptype
((((list A) -> (list B) -> (list (A * B))) -> (list A)) -> (list B))%ptype
with
- | Some (_, (_, (_, _)), b0, b)%zrange =>
+ | Datatypes.Some (_, (_, (_, _)), b0, b)%zrange =>
if
type.type_beq base.type base.type.type_beq
((((list b0) -> (list b) -> (list (b0 * b))) -> (list b0)) ->
@@ -919,15 +926,17 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
x'2 <- base.try_make_transport_cps B B;
fv0 <- (x1 <- (xs <- reflect_list (v1 (v x));
ys <- reflect_list (v2 (v0 x0));
- Some
+ Datatypes.Some
(Compilers.reify_list
- (map (fun '(x1, y)%zrange => (x1, y)%expr_pat)
- (combine xs ys))));
- Some (Base x1));
- Some (fv1 <-- fv0;
- Base (x'2 (x'1 (x'0 (x' fv1)))))%under_lets
- else None
- | None => None
+ (List.map
+ (fun '(x1, y)%zrange => (x1, y)%expr_pat)
+ (List.combine xs ys))));
+ Datatypes.Some (Base x1));
+ Datatypes.Some
+ (fv1 <-- fv0;
+ Base (x'2 (x'1 (x'0 (x' fv1)))))%under_lets
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end;;;
Base (#(List_combine)%expr @ x @ x0)%expr_pat)%option
| @List_map A B =>
@@ -939,7 +948,7 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
'1%pbtype -> '2%pbtype) -> (pattern.base.type.list '1))%ptype
((((A -> B) -> (list A) -> (list B)) -> A -> B) -> (list A))%ptype
with
- | Some (_, _, (_, _), (_, b4), b)%zrange =>
+ | Datatypes.Some (_, _, (_, _), (_, b4), b)%zrange =>
if
type.type_beq base.type base.type.type_beq
((((b -> b4) -> (list b) -> (list b4)) -> b -> b4) -> (list b))%ptype
@@ -955,7 +964,7 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
v1 <- base.try_make_transport_cps b4 B;
v2 <- base.try_make_transport_cps B B;
fv0 <- (ls <- reflect_list (v0 (v x0));
- Some
+ Datatypes.Some
(Datatypes.list_rect
(fun _ : Datatypes.list (expr b) =>
UnderLets (expr (list b4))) (Base []%expr_pat)
@@ -964,12 +973,12 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
(rec' <-- rec;
fx <-- x'2 (x'1 (x'0 (x' x))) x1;
Base (fx :: rec')%expr_pat)%under_lets) ls));
- Some (fv1 <-- fv0;
- Base (v2 (v1 fv1)))%under_lets
- else None
- | None => None
+ Datatypes.Some (fv1 <-- fv0;
+ Base (v2 (v1 fv1)))%under_lets
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end;;
- None);;;
+ Datatypes.None);;;
Base
(#(List_map)%expr @ (λ x1 : var A,
to_expr (x ($x1)))%expr @ x0)%expr_pat)%option
@@ -982,7 +991,7 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
(pattern.base.type.list '1)) -> (pattern.base.type.list '1))%ptype
((((list A) -> (list A) -> (list A)) -> (list A)) -> (list A))%ptype
with
- | Some (_, (_, _), _, b)%zrange =>
+ | Datatypes.Some (_, (_, _), _, b)%zrange =>
if
type.type_beq base.type base.type.type_beq
((((list b) -> (list b) -> (list b)) -> (list b)) -> (list b))%ptype
@@ -996,7 +1005,7 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
v3 <- base.try_make_transport_cps b A;
v4 <- base.try_make_transport_cps A A;
fv0 <- (ls <- reflect_list (v1 (v x));
- Some
+ Datatypes.Some
(Datatypes.list_rect
(fun _ : Datatypes.list (expr b) =>
UnderLets (expr (list b))) (Base (v2 (v0 x0)))
@@ -1004,12 +1013,12 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
(rec : UnderLets (expr (list b))) =>
(rec' <-- rec;
Base (x1 :: rec')%expr_pat)%under_lets) ls));
- Some (fv1 <-- fv0;
- Base (v4 (v3 fv1)))%under_lets
- else None
- | None => None
+ Datatypes.Some (fv1 <-- fv0;
+ Base (v4 (v3 fv1)))%under_lets
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end;;
- None);;;
+ Datatypes.None);;;
Base (x ++ x0)%expr)%option
| @List_rev A =>
fun x : expr (list A) =>
@@ -1019,7 +1028,7 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
(pattern.base.type.list '1))%ptype
(((list A) -> (list A)) -> (list A))%ptype
with
- | Some (_, _, b)%zrange =>
+ | Datatypes.Some (_, _, b)%zrange =>
if
type.type_beq base.type base.type.type_beq
(((list b) -> (list b)) -> (list b))%ptype
@@ -1031,13 +1040,13 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
v1 <- base.try_make_transport_cps b A;
v2 <- base.try_make_transport_cps A A;
fv0 <- (xs <- reflect_list (v0 (v x));
- Some (Base (Compilers.reify_list (rev xs))));
- Some (fv1 <-- fv0;
- Base (v2 (v1 fv1)))%under_lets
- else None
- | None => None
+ Datatypes.Some (Base (Compilers.reify_list (rev xs))));
+ Datatypes.Some (fv1 <-- fv0;
+ Base (v2 (v1 fv1)))%under_lets
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end;;
- None);;;
+ Datatypes.None);;;
Base (#(List_rev)%expr @ x)%expr_pat)%option
| @List_flat_map A B =>
fun (x : expr A -> UnderLets (expr (list B))) (x0 : expr (list A)) =>
@@ -1050,7 +1059,7 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
((((A -> (list B)) -> (list A) -> (list B)) -> A -> (list B)) ->
(list A))%ptype
with
- | Some (_, _, (_, _), (_, b4), b)%zrange =>
+ | Datatypes.Some (_, _, (_, _), (_, b4), b)%zrange =>
if
type.type_beq base.type base.type.type_beq
((((b -> (list b4)) -> (list b) -> (list b4)) -> b -> (list b4)) ->
@@ -1068,7 +1077,7 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
v1 <- base.try_make_transport_cps b4 B;
v2 <- base.try_make_transport_cps B B;
fv0 <- (ls <- reflect_list (v0 (v x0));
- Some
+ Datatypes.Some
(Datatypes.list_rect
(fun _ : Datatypes.list (expr b) =>
UnderLets (expr (list b4))) (Base []%expr_pat)
@@ -1077,14 +1086,14 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
(rec' <-- rec;
fx <-- x'2 (x'1 (x'0 (x' x))) x1;
Base ($fx ++ rec')%expr)%under_lets) ls));
- Some
+ Datatypes.Some
(fv1 <-- fv0;
fv2 <-- do_again (list B) (v1 fv1);
Base (v2 fv2))%under_lets
- else None
- | None => None
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end;;
- None);;;
+ Datatypes.None);;;
Base
(#(List_flat_map)%expr @ (λ x1 : var A,
to_expr (x ($x1)))%expr @ x0)%expr_pat)%option
@@ -1099,7 +1108,7 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
((((A -> bool) -> (list A) -> (list A * list A)%etype) -> A -> bool) ->
(list A))%ptype
with
- | Some (_, _, (_, (_, _)), (_, _), b)%zrange =>
+ | Datatypes.Some (_, _, (_, (_, _)), (_, _), b)%zrange =>
if
type.type_beq base.type base.type.type_beq
((((b -> bool) -> (list b) -> (list b * list b)%etype) ->
@@ -1117,7 +1126,7 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
x'3 <- base.try_make_transport_cps A A;
x'4 <- base.try_make_transport_cps A A;
fv0 <- (ls <- reflect_list (v0 (v x0));
- Some
+ Datatypes.Some
(Datatypes.list_rect
(fun _ : Datatypes.list (expr b) =>
UnderLets (expr (list b * list b)%etype))
@@ -1136,14 +1145,14 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
(λ _ : expr unit,
($g, $x1 :: $d)%expr_pat) @ $fx)%expr_pat)%expr @
rec')%expr_pat)%under_lets) ls));
- Some
+ Datatypes.Some
(fv1 <-- fv0;
fv2 <-- do_again (list A * list A) (x'2 (x'1 fv1));
Base (x'4 (x'3 fv2)))%under_lets
- else None
- | None => None
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end;;
- None);;;
+ Datatypes.None);;;
Base
(#(List_partition)%expr @ (λ x1 : var A,
to_expr (x ($x1)))%expr @ x0)%expr_pat)%option
@@ -1159,7 +1168,7 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
(((((B -> A -> A) -> A -> (list B) -> A) -> B -> A -> A) -> A) ->
(list B))%ptype
with
- | Some (_, (_, _), (_, (_, _)), (_, (_, _)), b0, b)%zrange =>
+ | Datatypes.Some (_, (_, _), (_, (_, _)), (_, (_, _)), b0, b)%zrange =>
if
type.type_beq base.type base.type.type_beq
(((((b -> b0 -> b0) -> b0 -> (list b) -> b0) -> b -> b0 -> b0) ->
@@ -1181,7 +1190,7 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
v3 <- base.try_make_transport_cps b0 A;
v4 <- base.try_make_transport_cps A A;
fv0 <- (ls <- reflect_list (v2 (v0 x1));
- Some
+ Datatypes.Some
(Datatypes.list_rect
(fun _ : Datatypes.list (expr b) =>
UnderLets (expr b0)) (Base (v1 (v x0)))
@@ -1190,12 +1199,12 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
(rec' <-- rec;
x'4 (x'3 (x'2 (x'1 (x'0 (x' x))))) x2 rec')%under_lets)
ls));
- Some (fv1 <-- fv0;
- Base (v4 (v3 fv1)))%under_lets
- else None
- | None => None
+ Datatypes.Some (fv1 <-- fv0;
+ Base (v4 (v3 fv1)))%under_lets
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end;;
- None);;;
+ Datatypes.None);;;
Base
(#(List_fold_right)%expr @
(λ (x2 : var B)(x3 : var A),
@@ -1215,7 +1224,7 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
((((ℕ -> (T -> T) -> (list T) -> (list T)) -> (projT1 args)) ->
T -> T) -> (list T))%ptype
with
- | Some (_, (_, _, (_, _)), _, (_, _), b)%zrange =>
+ | Datatypes.Some (_, (_, _, (_, _)), _, (_, _), b)%zrange =>
if
type.type_beq base.type base.type.type_beq
((((ℕ -> (b -> b) -> (list b) -> (list b)) -> ℕ) -> b -> b) ->
@@ -1234,19 +1243,19 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
v1 <- base.try_make_transport_cps b T;
v2 <- base.try_make_transport_cps T T;
fv0 <- (ls <- reflect_list (v0 (v x1));
- Some
+ Datatypes.Some
(retv <---- update_nth (let (x2, _) := xv in x2)
(fun x2 : UnderLets (expr b) =>
x3 <-- x2;
x'2 (x'1 (x'0 (x' x0))) x3)
- (map Base ls);
+ (List.map Base ls);
Base (Compilers.reify_list retv))%under_lets);
- Some (fv1 <-- fv0;
- Base (v2 (v1 fv1)))%under_lets
- else None
- | None => None
+ Datatypes.Some (fv1 <-- fv0;
+ Base (v2 (v1 fv1)))%under_lets
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end;;;
Base
(#(List_update_nth)%expr @ x @ (λ x2 : var T,
@@ -1263,7 +1272,7 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
((((T -> (list T) -> ℕ -> T) -> T) -> (list T)) ->
(projT1 args))%ptype
with
- | Some (_, (_, (_, _)), _, b0, _)%zrange =>
+ | Datatypes.Some (_, (_, (_, _)), _, b0, _)%zrange =>
if
type.type_beq base.type base.type.type_beq
((((b0 -> (list b0) -> ℕ -> b0) -> b0) -> (list b0)) -> ℕ)%ptype
@@ -1280,18 +1289,18 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
v3 <- base.try_make_transport_cps b0 T;
v4 <- base.try_make_transport_cps T T;
fv0 <- (x2 <- (ls <- reflect_list (v2 (v0 x0));
- Some
+ Datatypes.Some
(nth_default (v1 (v x)) ls
(let (x2, _) := xv in x2)));
- Some (Base x2));
- Some (fv1 <-- fv0;
- Base (v4 (v3 fv1)))%under_lets
- else None
- | None => None
+ Datatypes.Some (Base x2));
+ Datatypes.Some (fv1 <-- fv0;
+ Base (v4 (v3 fv1)))%under_lets
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end;;
- None);;;
+ Datatypes.None);;;
Base (#(List_nth_default)%expr @ x @ x0 @ x1)%expr_pat)%option
| Z_add =>
fun x x0 : expr ℤ =>
@@ -1305,25 +1314,25 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
pattern.type.unify_extracted (ℤ -> ℤ)%ptype
((projT1 args0) -> (projT1 args))%ptype
with
- | Some (_, _)%zrange =>
+ | Datatypes.Some (_, _)%zrange =>
if
type.type_beq base.type base.type.type_beq (ℤ -> ℤ)%ptype
((projT1 args0) -> (projT1 args))%ptype
then
xv <- ident.unify pattern.ident.Literal ##(projT2 args0);
xv0 <- ident.unify pattern.ident.Literal ##(projT2 args);
- Some
+ Datatypes.Some
(Base
(##((let (x1, _) := xv in x1) +
(let (x1, _) := xv0 in x1))%Z)%expr)
- else None
- | None => None
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end;;
- None);;;
+ Datatypes.None);;;
Base (x + x0)%expr)%option
| Z_mul =>
fun x x0 : expr ℤ =>
@@ -1337,25 +1346,25 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
pattern.type.unify_extracted (ℤ -> ℤ)%ptype
((projT1 args0) -> (projT1 args))%ptype
with
- | Some (_, _)%zrange =>
+ | Datatypes.Some (_, _)%zrange =>
if
type.type_beq base.type base.type.type_beq (ℤ -> ℤ)%ptype
((projT1 args0) -> (projT1 args))%ptype
then
xv <- ident.unify pattern.ident.Literal ##(projT2 args0);
xv0 <- ident.unify pattern.ident.Literal ##(projT2 args);
- Some
+ Datatypes.Some
(Base
(##((let (x1, _) := xv in x1) *
(let (x1, _) := xv0 in x1))%Z)%expr)
- else None
- | None => None
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end;;
- None);;;
+ Datatypes.None);;;
Base (x * x0)%expr)%option
| Z_pow =>
fun x x0 : expr ℤ =>
@@ -1369,25 +1378,25 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
pattern.type.unify_extracted (ℤ -> ℤ)%ptype
((projT1 args0) -> (projT1 args))%ptype
with
- | Some (_, _)%zrange =>
+ | Datatypes.Some (_, _)%zrange =>
if
type.type_beq base.type base.type.type_beq (ℤ -> ℤ)%ptype
((projT1 args0) -> (projT1 args))%ptype
then
xv <- ident.unify pattern.ident.Literal ##(projT2 args0);
xv0 <- ident.unify pattern.ident.Literal ##(projT2 args);
- Some
+ Datatypes.Some
(Base
(##((let (x1, _) := xv in x1)
^ (let (x1, _) := xv0 in x1)))%expr)
- else None
- | None => None
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end;;
- None);;;
+ Datatypes.None);;;
Base (#(Z_pow)%expr @ x @ x0)%expr_pat)%option
| Z_sub =>
fun x x0 : expr ℤ =>
@@ -1401,25 +1410,25 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
pattern.type.unify_extracted (ℤ -> ℤ)%ptype
((projT1 args0) -> (projT1 args))%ptype
with
- | Some (_, _)%zrange =>
+ | Datatypes.Some (_, _)%zrange =>
if
type.type_beq base.type base.type.type_beq (ℤ -> ℤ)%ptype
((projT1 args0) -> (projT1 args))%ptype
then
xv <- ident.unify pattern.ident.Literal ##(projT2 args0);
xv0 <- ident.unify pattern.ident.Literal ##(projT2 args);
- Some
+ Datatypes.Some
(Base
(##((let (x1, _) := xv in x1) -
(let (x1, _) := xv0 in x1))%Z)%expr)
- else None
- | None => None
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end;;
- None);;;
+ Datatypes.None);;;
Base (x - x0)%expr)%option
| Z_opp =>
fun x : expr ℤ =>
@@ -1427,17 +1436,17 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
| @expr.Ident _ _ _ t idc =>
args <- invert_bind_args idc Raw.ident.Literal;
match pattern.type.unify_extracted ℤ (projT1 args) with
- | Some _ =>
+ | Datatypes.Some _ =>
if type.type_beq base.type base.type.type_beq ℤ (projT1 args)
then
xv <- ident.unify pattern.ident.Literal ##(projT2 args);
- Some (Base (##(- (let (x0, _) := xv in x0))%Z)%expr)
- else None
- | None => None
+ Datatypes.Some (Base (##(- (let (x0, _) := xv in x0))%Z)%expr)
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end;;
- None);;;
+ Datatypes.None);;;
Base (- x)%expr)%option
| Z_div =>
fun x x0 : expr ℤ =>
@@ -1451,25 +1460,25 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
pattern.type.unify_extracted (ℤ -> ℤ)%ptype
((projT1 args0) -> (projT1 args))%ptype
with
- | Some (_, _)%zrange =>
+ | Datatypes.Some (_, _)%zrange =>
if
type.type_beq base.type base.type.type_beq (ℤ -> ℤ)%ptype
((projT1 args0) -> (projT1 args))%ptype
then
xv <- ident.unify pattern.ident.Literal ##(projT2 args0);
xv0 <- ident.unify pattern.ident.Literal ##(projT2 args);
- Some
+ Datatypes.Some
(Base
(##((let (x1, _) := xv in x1) /
(let (x1, _) := xv0 in x1))%Z)%expr)
- else None
- | None => None
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end;;
- None);;;
+ Datatypes.None);;;
Base (x / x0)%expr)%option
| Z_modulo =>
fun x x0 : expr ℤ =>
@@ -1483,25 +1492,25 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
pattern.type.unify_extracted (ℤ -> ℤ)%ptype
((projT1 args0) -> (projT1 args))%ptype
with
- | Some (_, _)%zrange =>
+ | Datatypes.Some (_, _)%zrange =>
if
type.type_beq base.type base.type.type_beq (ℤ -> ℤ)%ptype
((projT1 args0) -> (projT1 args))%ptype
then
xv <- ident.unify pattern.ident.Literal ##(projT2 args0);
xv0 <- ident.unify pattern.ident.Literal ##(projT2 args);
- Some
+ Datatypes.Some
(Base
(##((let (x1, _) := xv in x1)
mod (let (x1, _) := xv0 in x1))%Z)%expr)
- else None
- | None => None
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end;;
- None);;;
+ Datatypes.None);;;
Base (x mod x0)%expr)%option
| Z_log2 =>
fun x : expr ℤ =>
@@ -1509,17 +1518,18 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
| @expr.Ident _ _ _ t idc =>
args <- invert_bind_args idc Raw.ident.Literal;
match pattern.type.unify_extracted ℤ (projT1 args) with
- | Some _ =>
+ | Datatypes.Some _ =>
if type.type_beq base.type base.type.type_beq ℤ (projT1 args)
then
xv <- ident.unify pattern.ident.Literal ##(projT2 args);
- Some (Base (##(Z.log2 (let (x0, _) := xv in x0)))%expr)
- else None
- | None => None
+ Datatypes.Some
+ (Base (##(Z.log2 (let (x0, _) := xv in x0)))%expr)
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end;;
- None);;;
+ Datatypes.None);;;
Base (#(Z_log2)%expr @ x)%expr_pat)%option
| Z_log2_up =>
fun x : expr ℤ =>
@@ -1527,17 +1537,18 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
| @expr.Ident _ _ _ t idc =>
args <- invert_bind_args idc Raw.ident.Literal;
match pattern.type.unify_extracted ℤ (projT1 args) with
- | Some _ =>
+ | Datatypes.Some _ =>
if type.type_beq base.type base.type.type_beq ℤ (projT1 args)
then
xv <- ident.unify pattern.ident.Literal ##(projT2 args);
- Some (Base (##(Z.log2_up (let (x0, _) := xv in x0)))%expr)
- else None
- | None => None
+ Datatypes.Some
+ (Base (##(Z.log2_up (let (x0, _) := xv in x0)))%expr)
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end;;
- None);;;
+ Datatypes.None);;;
Base (#(Z_log2_up)%expr @ x)%expr_pat)%option
| Z_eqb =>
fun x x0 : expr ℤ =>
@@ -1551,25 +1562,25 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
pattern.type.unify_extracted (ℤ -> ℤ)%ptype
((projT1 args0) -> (projT1 args))%ptype
with
- | Some (_, _)%zrange =>
+ | Datatypes.Some (_, _)%zrange =>
if
type.type_beq base.type base.type.type_beq (ℤ -> ℤ)%ptype
((projT1 args0) -> (projT1 args))%ptype
then
xv <- ident.unify pattern.ident.Literal ##(projT2 args0);
xv0 <- ident.unify pattern.ident.Literal ##(projT2 args);
- Some
+ Datatypes.Some
(Base
(##((let (x1, _) := xv in x1) =?
(let (x1, _) := xv0 in x1)))%expr)
- else None
- | None => None
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end;;
- None);;;
+ Datatypes.None);;;
Base (#(Z_eqb)%expr @ x @ x0)%expr_pat)%option
| Z_leb =>
fun x x0 : expr ℤ =>
@@ -1583,26 +1594,58 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
pattern.type.unify_extracted (ℤ -> ℤ)%ptype
((projT1 args0) -> (projT1 args))%ptype
with
- | Some (_, _)%zrange =>
+ | Datatypes.Some (_, _)%zrange =>
if
type.type_beq base.type base.type.type_beq (ℤ -> ℤ)%ptype
((projT1 args0) -> (projT1 args))%ptype
then
xv <- ident.unify pattern.ident.Literal ##(projT2 args0);
xv0 <- ident.unify pattern.ident.Literal ##(projT2 args);
- Some
+ Datatypes.Some
(Base
(##((let (x1, _) := xv in x1) <=?
(let (x1, _) := xv0 in x1)))%expr)
- else None
- | None => None
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end;;
- None);;;
+ Datatypes.None);;;
Base (#(Z_leb)%expr @ x @ x0)%expr_pat)%option
+| Z_ltb =>
+ fun x x0 : expr ℤ =>
+ ((match x with
+ | @expr.Ident _ _ _ t idc =>
+ match x0 with
+ | @expr.Ident _ _ _ t0 idc0 =>
+ args <- invert_bind_args idc0 Raw.ident.Literal;
+ args0 <- invert_bind_args idc Raw.ident.Literal;
+ match
+ pattern.type.unify_extracted (ℤ -> ℤ)%ptype
+ ((projT1 args0) -> (projT1 args))%ptype
+ with
+ | Datatypes.Some (_, _)%zrange =>
+ if
+ type.type_beq base.type base.type.type_beq (ℤ -> ℤ)%ptype
+ ((projT1 args0) -> (projT1 args))%ptype
+ then
+ xv <- ident.unify pattern.ident.Literal ##(projT2 args0);
+ xv0 <- ident.unify pattern.ident.Literal ##(projT2 args);
+ Datatypes.Some
+ (Base
+ (##((let (x1, _) := xv in x1) <?
+ (let (x1, _) := xv0 in x1)))%expr)
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
+ end
+ | _ => Datatypes.None
+ end
+ | _ => Datatypes.None
+ end;;
+ Datatypes.None);;;
+ Base (#(Z_ltb)%expr @ x @ x0)%expr_pat)%option
| Z_geb =>
fun x x0 : expr ℤ =>
((match x with
@@ -1615,43 +1658,76 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
pattern.type.unify_extracted (ℤ -> ℤ)%ptype
((projT1 args0) -> (projT1 args))%ptype
with
- | Some (_, _)%zrange =>
+ | Datatypes.Some (_, _)%zrange =>
if
type.type_beq base.type base.type.type_beq (ℤ -> ℤ)%ptype
((projT1 args0) -> (projT1 args))%ptype
then
xv <- ident.unify pattern.ident.Literal ##(projT2 args0);
xv0 <- ident.unify pattern.ident.Literal ##(projT2 args);
- Some
+ Datatypes.Some
(Base
(##((let (x1, _) := xv in x1) >=?
(let (x1, _) := xv0 in x1)))%expr)
- else None
- | None => None
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end;;
- None);;;
+ Datatypes.None);;;
Base (#(Z_geb)%expr @ x @ x0)%expr_pat)%option
+| Z_gtb =>
+ fun x x0 : expr ℤ =>
+ ((match x with
+ | @expr.Ident _ _ _ t idc =>
+ match x0 with
+ | @expr.Ident _ _ _ t0 idc0 =>
+ args <- invert_bind_args idc0 Raw.ident.Literal;
+ args0 <- invert_bind_args idc Raw.ident.Literal;
+ match
+ pattern.type.unify_extracted (ℤ -> ℤ)%ptype
+ ((projT1 args0) -> (projT1 args))%ptype
+ with
+ | Datatypes.Some (_, _)%zrange =>
+ if
+ type.type_beq base.type base.type.type_beq (ℤ -> ℤ)%ptype
+ ((projT1 args0) -> (projT1 args))%ptype
+ then
+ xv <- ident.unify pattern.ident.Literal ##(projT2 args0);
+ xv0 <- ident.unify pattern.ident.Literal ##(projT2 args);
+ Datatypes.Some
+ (Base
+ (##((let (x1, _) := xv in x1) >?
+ (let (x1, _) := xv0 in x1)))%expr)
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
+ end
+ | _ => Datatypes.None
+ end
+ | _ => Datatypes.None
+ end;;
+ Datatypes.None);;;
+ Base (#(Z_gtb)%expr @ x @ x0)%expr_pat)%option
| Z_of_nat =>
fun x : expr ℕ =>
((match x with
| @expr.Ident _ _ _ t idc =>
args <- invert_bind_args idc Raw.ident.Literal;
match pattern.type.unify_extracted ℕ (projT1 args) with
- | Some _ =>
+ | Datatypes.Some _ =>
if type.type_beq base.type base.type.type_beq ℕ (projT1 args)
then
xv <- ident.unify pattern.ident.Literal ##(projT2 args);
- Some (Base (##(Z.of_nat (let (x0, _) := xv in x0)))%expr)
- else None
- | None => None
+ Datatypes.Some
+ (Base (##(Z.of_nat (let (x0, _) := xv in x0)))%expr)
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end;;
- None);;;
+ Datatypes.None);;;
Base (#(Z_of_nat)%expr @ x)%expr_pat)%option
| Z_to_nat =>
fun x : expr ℤ =>
@@ -1659,17 +1735,18 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
| @expr.Ident _ _ _ t idc =>
args <- invert_bind_args idc Raw.ident.Literal;
match pattern.type.unify_extracted ℤ (projT1 args) with
- | Some _ =>
+ | Datatypes.Some _ =>
if type.type_beq base.type base.type.type_beq ℤ (projT1 args)
then
xv <- ident.unify pattern.ident.Literal ##(projT2 args);
- Some (Base (##(Z.to_nat (let (x0, _) := xv in x0)))%expr)
- else None
- | None => None
+ Datatypes.Some
+ (Base (##(Z.to_nat (let (x0, _) := xv in x0)))%expr)
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end;;
- None);;;
+ Datatypes.None);;;
Base (#(Z_to_nat)%expr @ x)%expr_pat)%option
| Z_shiftr =>
fun x x0 : expr ℤ =>
@@ -1683,25 +1760,25 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
pattern.type.unify_extracted (ℤ -> ℤ)%ptype
((projT1 args0) -> (projT1 args))%ptype
with
- | Some (_, _)%zrange =>
+ | Datatypes.Some (_, _)%zrange =>
if
type.type_beq base.type base.type.type_beq (ℤ -> ℤ)%ptype
((projT1 args0) -> (projT1 args))%ptype
then
xv <- ident.unify pattern.ident.Literal ##(projT2 args0);
xv0 <- ident.unify pattern.ident.Literal ##(projT2 args);
- Some
+ Datatypes.Some
(Base
(##(Z.shiftr (let (x1, _) := xv in x1)
(let (x1, _) := xv0 in x1)))%expr)
- else None
- | None => None
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end;;
- None);;;
+ Datatypes.None);;;
Base (x >> x0)%expr)%option
| Z_shiftl =>
fun x x0 : expr ℤ =>
@@ -1715,25 +1792,25 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
pattern.type.unify_extracted (ℤ -> ℤ)%ptype
((projT1 args0) -> (projT1 args))%ptype
with
- | Some (_, _)%zrange =>
+ | Datatypes.Some (_, _)%zrange =>
if
type.type_beq base.type base.type.type_beq (ℤ -> ℤ)%ptype
((projT1 args0) -> (projT1 args))%ptype
then
xv <- ident.unify pattern.ident.Literal ##(projT2 args0);
xv0 <- ident.unify pattern.ident.Literal ##(projT2 args);
- Some
+ Datatypes.Some
(Base
(##(Z.shiftl (let (x1, _) := xv in x1)
(let (x1, _) := xv0 in x1)))%expr)
- else None
- | None => None
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end;;
- None);;;
+ Datatypes.None);;;
Base (x << x0)%expr)%option
| Z_land =>
fun x x0 : expr ℤ =>
@@ -1747,25 +1824,25 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
pattern.type.unify_extracted (ℤ -> ℤ)%ptype
((projT1 args0) -> (projT1 args))%ptype
with
- | Some (_, _)%zrange =>
+ | Datatypes.Some (_, _)%zrange =>
if
type.type_beq base.type base.type.type_beq (ℤ -> ℤ)%ptype
((projT1 args0) -> (projT1 args))%ptype
then
xv <- ident.unify pattern.ident.Literal ##(projT2 args0);
xv0 <- ident.unify pattern.ident.Literal ##(projT2 args);
- Some
+ Datatypes.Some
(Base
(##(Z.land (let (x1, _) := xv in x1)
(let (x1, _) := xv0 in x1)))%expr)
- else None
- | None => None
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end;;
- None);;;
+ Datatypes.None);;;
Base (x &' x0)%expr)%option
| Z_lor =>
fun x x0 : expr ℤ =>
@@ -1779,43 +1856,108 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
pattern.type.unify_extracted (ℤ -> ℤ)%ptype
((projT1 args0) -> (projT1 args))%ptype
with
- | Some (_, _)%zrange =>
+ | Datatypes.Some (_, _)%zrange =>
if
type.type_beq base.type base.type.type_beq (ℤ -> ℤ)%ptype
((projT1 args0) -> (projT1 args))%ptype
then
xv <- ident.unify pattern.ident.Literal ##(projT2 args0);
xv0 <- ident.unify pattern.ident.Literal ##(projT2 args);
- Some
+ Datatypes.Some
(Base
(##(Z.lor (let (x1, _) := xv in x1)
(let (x1, _) := xv0 in x1)))%expr)
- else None
- | None => None
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end;;
- None);;;
+ Datatypes.None);;;
Base (x || x0)%expr)%option
+| Z_min =>
+ fun x x0 : expr ℤ =>
+ ((match x with
+ | @expr.Ident _ _ _ t idc =>
+ match x0 with
+ | @expr.Ident _ _ _ t0 idc0 =>
+ args <- invert_bind_args idc0 Raw.ident.Literal;
+ args0 <- invert_bind_args idc Raw.ident.Literal;
+ match
+ pattern.type.unify_extracted (ℤ -> ℤ)%ptype
+ ((projT1 args0) -> (projT1 args))%ptype
+ with
+ | Datatypes.Some (_, _)%zrange =>
+ if
+ type.type_beq base.type base.type.type_beq (ℤ -> ℤ)%ptype
+ ((projT1 args0) -> (projT1 args))%ptype
+ then
+ xv <- ident.unify pattern.ident.Literal ##(projT2 args0);
+ xv0 <- ident.unify pattern.ident.Literal ##(projT2 args);
+ Datatypes.Some
+ (Base
+ (##(Z.min (let (x1, _) := xv in x1)
+ (let (x1, _) := xv0 in x1)))%expr)
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
+ end
+ | _ => Datatypes.None
+ end
+ | _ => Datatypes.None
+ end;;
+ Datatypes.None);;;
+ Base (#(Z_min)%expr @ x @ x0)%expr_pat)%option
+| Z_max =>
+ fun x x0 : expr ℤ =>
+ ((match x with
+ | @expr.Ident _ _ _ t idc =>
+ match x0 with
+ | @expr.Ident _ _ _ t0 idc0 =>
+ args <- invert_bind_args idc0 Raw.ident.Literal;
+ args0 <- invert_bind_args idc Raw.ident.Literal;
+ match
+ pattern.type.unify_extracted (ℤ -> ℤ)%ptype
+ ((projT1 args0) -> (projT1 args))%ptype
+ with
+ | Datatypes.Some (_, _)%zrange =>
+ if
+ type.type_beq base.type base.type.type_beq (ℤ -> ℤ)%ptype
+ ((projT1 args0) -> (projT1 args))%ptype
+ then
+ xv <- ident.unify pattern.ident.Literal ##(projT2 args0);
+ xv0 <- ident.unify pattern.ident.Literal ##(projT2 args);
+ Datatypes.Some
+ (Base
+ (##(Z.max (let (x1, _) := xv in x1)
+ (let (x1, _) := xv0 in x1)))%expr)
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
+ end
+ | _ => Datatypes.None
+ end
+ | _ => Datatypes.None
+ end;;
+ Datatypes.None);;;
+ Base (#(Z_max)%expr @ x @ x0)%expr_pat)%option
| Z_bneg =>
fun x : expr ℤ =>
((match x with
| @expr.Ident _ _ _ t idc =>
args <- invert_bind_args idc Raw.ident.Literal;
match pattern.type.unify_extracted ℤ (projT1 args) with
- | Some _ =>
+ | Datatypes.Some _ =>
if type.type_beq base.type base.type.type_beq ℤ (projT1 args)
then
xv <- ident.unify pattern.ident.Literal ##(projT2 args);
- Some (Base (##(Z.bneg (let (x0, _) := xv in x0)))%expr)
- else None
- | None => None
+ Datatypes.Some
+ (Base (##(Z.bneg (let (x0, _) := xv in x0)))%expr)
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end;;
- None);;;
+ Datatypes.None);;;
Base (#(Z_bneg)%expr @ x)%expr_pat)%option
| Z_lnot_modulo =>
fun x x0 : expr ℤ =>
@@ -1829,25 +1971,25 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
pattern.type.unify_extracted (ℤ -> ℤ)%ptype
((projT1 args0) -> (projT1 args))%ptype
with
- | Some (_, _)%zrange =>
+ | Datatypes.Some (_, _)%zrange =>
if
type.type_beq base.type base.type.type_beq (ℤ -> ℤ)%ptype
((projT1 args0) -> (projT1 args))%ptype
then
xv <- ident.unify pattern.ident.Literal ##(projT2 args0);
xv0 <- ident.unify pattern.ident.Literal ##(projT2 args);
- Some
+ Datatypes.Some
(Base
(##(Z.lnot_modulo (let (x1, _) := xv in x1)
(let (x1, _) := xv0 in x1)))%expr)
- else None
- | None => None
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end;;
- None);;;
+ Datatypes.None);;;
Base (#(Z_lnot_modulo)%expr @ x @ x0)%expr_pat)%option
| Z_mul_split =>
fun x x0 x1 : expr ℤ =>
@@ -1864,7 +2006,7 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
pattern.type.unify_extracted ((ℤ -> ℤ) -> ℤ)%ptype
(((projT1 args1) -> (projT1 args0)) -> (projT1 args))%ptype
with
- | Some (_, _, _)%zrange =>
+ | Datatypes.Some (_, _, _)%zrange =>
if
type.type_beq base.type base.type.type_beq
((ℤ -> ℤ) -> ℤ)%ptype
@@ -1876,7 +2018,7 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
##(projT2 args0);
xv1 <- ident.unify pattern.ident.Literal
##(projT2 args);
- Some
+ Datatypes.Some
(Base
(let
'(a1, b1)%zrange :=
@@ -1884,16 +2026,16 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
(let (x2, _) := xv0 in x2)
(let (x2, _) := xv1 in x2) in
((##a1)%expr, (##b1)%expr)%expr_pat))
- else None
- | None => None
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end;;
- None);;;
+ Datatypes.None);;;
Base (#(Z_mul_split)%expr @ x @ x0 @ x1)%expr_pat)%option
| Z_add_get_carry =>
fun x x0 x1 : expr ℤ =>
@@ -1910,7 +2052,7 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
pattern.type.unify_extracted ((ℤ -> ℤ) -> ℤ)%ptype
(((projT1 args1) -> (projT1 args0)) -> (projT1 args))%ptype
with
- | Some (_, _, _)%zrange =>
+ | Datatypes.Some (_, _, _)%zrange =>
if
type.type_beq base.type base.type.type_beq
((ℤ -> ℤ) -> ℤ)%ptype
@@ -1922,7 +2064,7 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
##(projT2 args0);
xv1 <- ident.unify pattern.ident.Literal
##(projT2 args);
- Some
+ Datatypes.Some
(Base
(let
'(a1, b1)%zrange :=
@@ -1930,16 +2072,16 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
(let (x2, _) := xv0 in x2)
(let (x2, _) := xv1 in x2) in
((##a1)%expr, (##b1)%expr)%expr_pat))
- else None
- | None => None
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end;;
- None);;;
+ Datatypes.None);;;
Base (#(Z_add_get_carry)%expr @ x @ x0 @ x1)%expr_pat)%option
| Z_add_with_carry =>
fun x x0 x1 : expr ℤ =>
@@ -1956,7 +2098,7 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
pattern.type.unify_extracted ((ℤ -> ℤ) -> ℤ)%ptype
(((projT1 args1) -> (projT1 args0)) -> (projT1 args))%ptype
with
- | Some (_, _, _)%zrange =>
+ | Datatypes.Some (_, _, _)%zrange =>
if
type.type_beq base.type base.type.type_beq
((ℤ -> ℤ) -> ℤ)%ptype
@@ -1968,21 +2110,21 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
##(projT2 args0);
xv1 <- ident.unify pattern.ident.Literal
##(projT2 args);
- Some
+ Datatypes.Some
(Base
(##(Z.add_with_carry (let (x2, _) := xv in x2)
(let (x2, _) := xv0 in x2)
(let (x2, _) := xv1 in x2)))%expr)
- else None
- | None => None
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end;;
- None);;;
+ Datatypes.None);;;
Base (#(Z_add_with_carry)%expr @ x @ x0 @ x1)%expr_pat)%option
| Z_add_with_get_carry =>
fun x x0 x1 x2 : expr ℤ =>
@@ -2004,7 +2146,7 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
((((projT1 args2) -> (projT1 args1)) ->
(projT1 args0)) -> (projT1 args))%ptype
with
- | Some (_, _, _, _)%zrange =>
+ | Datatypes.Some (_, _, _, _)%zrange =>
if
type.type_beq base.type base.type.type_beq
(((ℤ -> ℤ) -> ℤ) -> ℤ)%ptype
@@ -2019,7 +2161,7 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
##(projT2 args0);
xv2 <- ident.unify pattern.ident.Literal
##(projT2 args);
- Some
+ Datatypes.Some
(Base
(let
'(a2, b2)%zrange :=
@@ -2029,18 +2171,18 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
(let (x3, _) := xv1 in x3)
(let (x3, _) := xv2 in x3) in
((##a2)%expr, (##b2)%expr)%expr_pat))
- else None
- | None => None
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end;;
- None);;;
+ Datatypes.None);;;
Base (#(Z_add_with_get_carry)%expr @ x @ x0 @ x1 @ x2)%expr_pat)%option
| Z_sub_get_borrow =>
fun x x0 x1 : expr ℤ =>
@@ -2057,7 +2199,7 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
pattern.type.unify_extracted ((ℤ -> ℤ) -> ℤ)%ptype
(((projT1 args1) -> (projT1 args0)) -> (projT1 args))%ptype
with
- | Some (_, _, _)%zrange =>
+ | Datatypes.Some (_, _, _)%zrange =>
if
type.type_beq base.type base.type.type_beq
((ℤ -> ℤ) -> ℤ)%ptype
@@ -2069,7 +2211,7 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
##(projT2 args0);
xv1 <- ident.unify pattern.ident.Literal
##(projT2 args);
- Some
+ Datatypes.Some
(Base
(let
'(a1, b1)%zrange :=
@@ -2077,16 +2219,16 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
(let (x2, _) := xv0 in x2)
(let (x2, _) := xv1 in x2) in
((##a1)%expr, (##b1)%expr)%expr_pat))
- else None
- | None => None
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end;;
- None);;;
+ Datatypes.None);;;
Base (#(Z_sub_get_borrow)%expr @ x @ x0 @ x1)%expr_pat)%option
| Z_sub_with_get_borrow =>
fun x x0 x1 x2 : expr ℤ =>
@@ -2108,7 +2250,7 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
((((projT1 args2) -> (projT1 args1)) ->
(projT1 args0)) -> (projT1 args))%ptype
with
- | Some (_, _, _, _)%zrange =>
+ | Datatypes.Some (_, _, _, _)%zrange =>
if
type.type_beq base.type base.type.type_beq
(((ℤ -> ℤ) -> ℤ) -> ℤ)%ptype
@@ -2123,7 +2265,7 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
##(projT2 args0);
xv2 <- ident.unify pattern.ident.Literal
##(projT2 args);
- Some
+ Datatypes.Some
(Base
(let
'(a2, b2)%zrange :=
@@ -2133,18 +2275,18 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
(let (x3, _) := xv1 in x3)
(let (x3, _) := xv2 in x3) in
((##a2)%expr, (##b2)%expr)%expr_pat))
- else None
- | None => None
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end;;
- None);;;
+ Datatypes.None);;;
Base (#(Z_sub_with_get_borrow)%expr @ x @ x0 @ x1 @ x2)%expr_pat)%option
| Z_zselect =>
fun x x0 x1 : expr ℤ =>
@@ -2161,7 +2303,7 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
pattern.type.unify_extracted ((ℤ -> ℤ) -> ℤ)%ptype
(((projT1 args1) -> (projT1 args0)) -> (projT1 args))%ptype
with
- | Some (_, _, _)%zrange =>
+ | Datatypes.Some (_, _, _)%zrange =>
if
type.type_beq base.type base.type.type_beq
((ℤ -> ℤ) -> ℤ)%ptype
@@ -2173,21 +2315,21 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
##(projT2 args0);
xv1 <- ident.unify pattern.ident.Literal
##(projT2 args);
- Some
+ Datatypes.Some
(Base
(##(Z.zselect (let (x2, _) := xv in x2)
(let (x2, _) := xv0 in x2)
(let (x2, _) := xv1 in x2)))%expr)
- else None
- | None => None
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end;;
- None);;;
+ Datatypes.None);;;
Base (#(Z_zselect)%expr @ x @ x0 @ x1)%expr_pat)%option
| Z_add_modulo =>
fun x x0 x1 : expr ℤ =>
@@ -2204,7 +2346,7 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
pattern.type.unify_extracted ((ℤ -> ℤ) -> ℤ)%ptype
(((projT1 args1) -> (projT1 args0)) -> (projT1 args))%ptype
with
- | Some (_, _, _)%zrange =>
+ | Datatypes.Some (_, _, _)%zrange =>
if
type.type_beq base.type base.type.type_beq
((ℤ -> ℤ) -> ℤ)%ptype
@@ -2216,21 +2358,21 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
##(projT2 args0);
xv1 <- ident.unify pattern.ident.Literal
##(projT2 args);
- Some
+ Datatypes.Some
(Base
(##(Z.add_modulo (let (x2, _) := xv in x2)
(let (x2, _) := xv0 in x2)
(let (x2, _) := xv1 in x2)))%expr)
- else None
- | None => None
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end;;
- None);;;
+ Datatypes.None);;;
Base (#(Z_add_modulo)%expr @ x @ x0 @ x1)%expr_pat)%option
| Z_rshi =>
fun x x0 x1 x2 : expr ℤ =>
@@ -2252,7 +2394,7 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
((((projT1 args2) -> (projT1 args1)) ->
(projT1 args0)) -> (projT1 args))%ptype
with
- | Some (_, _, _, _)%zrange =>
+ | Datatypes.Some (_, _, _, _)%zrange =>
if
type.type_beq base.type base.type.type_beq
(((ℤ -> ℤ) -> ℤ) -> ℤ)%ptype
@@ -2267,24 +2409,24 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
##(projT2 args0);
xv2 <- ident.unify pattern.ident.Literal
##(projT2 args);
- Some
+ Datatypes.Some
(Base
(##(Z.rshi (let (x3, _) := xv in x3)
(let (x3, _) := xv0 in x3)
(let (x3, _) := xv1 in x3)
(let (x3, _) := xv2 in x3)))%expr)
- else None
- | None => None
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end;;
- None);;;
+ Datatypes.None);;;
Base (#(Z_rshi)%expr @ x @ x0 @ x1 @ x2)%expr_pat)%option
| Z_cc_m =>
fun x x0 : expr ℤ =>
@@ -2298,29 +2440,79 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
pattern.type.unify_extracted (ℤ -> ℤ)%ptype
((projT1 args0) -> (projT1 args))%ptype
with
- | Some (_, _)%zrange =>
+ | Datatypes.Some (_, _)%zrange =>
if
type.type_beq base.type base.type.type_beq (ℤ -> ℤ)%ptype
((projT1 args0) -> (projT1 args))%ptype
then
xv <- ident.unify pattern.ident.Literal ##(projT2 args0);
xv0 <- ident.unify pattern.ident.Literal ##(projT2 args);
- Some
+ Datatypes.Some
(Base
(##(Z.cc_m (let (x1, _) := xv in x1)
(let (x1, _) := xv0 in x1)))%expr)
- else None
- | None => None
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end
- | _ => None
+ | _ => Datatypes.None
end;;
- None);;;
+ Datatypes.None);;;
Base (#(Z_cc_m)%expr @ x @ x0)%expr_pat)%option
| Z_cast range => fun x : expr ℤ => Base (#(Z_cast range)%expr @ x)%expr_pat
| Z_cast2 range =>
fun x : expr (ℤ * ℤ)%etype => Base (#(Z_cast2 range)%expr @ x)%expr_pat
+| Some A => fun x : expr A => Base (#(Some)%expr @ x)%expr_pat
+| None A => Base #(None)%expr
+| @option_rect A P =>
+ fun (x : expr A -> UnderLets (expr P))
+ (x0 : expr unit -> UnderLets (expr P)) (x1 : expr (base.type.option A))
+ =>
+ Base
+ (#(option_rect)%expr @ (λ x2 : var A,
+ to_expr (x ($x2)))%expr @
+ (λ x2 : var unit,
+ to_expr (x0 ($x2)))%expr @ x1)%expr_pat
+| Build_zrange =>
+ fun x x0 : expr ℤ =>
+ ((match x with
+ | @expr.Ident _ _ _ t idc =>
+ match x0 with
+ | @expr.Ident _ _ _ t0 idc0 =>
+ args <- invert_bind_args idc0 Raw.ident.Literal;
+ args0 <- invert_bind_args idc Raw.ident.Literal;
+ match
+ pattern.type.unify_extracted (ℤ -> ℤ)%ptype
+ ((projT1 args0) -> (projT1 args))%ptype
+ with
+ | Datatypes.Some (_, _)%zrange =>
+ if
+ type.type_beq base.type base.type.type_beq (ℤ -> ℤ)%ptype
+ ((projT1 args0) -> (projT1 args))%ptype
+ then
+ xv <- ident.unify pattern.ident.Literal ##(projT2 args0);
+ xv0 <- ident.unify pattern.ident.Literal ##(projT2 args);
+ Datatypes.Some
+ (Base
+ (##r[(let (x1, _) := xv in x1) ~> let (x1, _) :=
+ xv0 in
+ x1]%zrange)%expr)
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
+ end
+ | _ => Datatypes.None
+ end
+ | _ => Datatypes.None
+ end;;
+ Datatypes.None);;;
+ Base (#(Build_zrange)%expr @ x @ x0)%expr_pat)%option
+| @zrange_rect P =>
+ fun (x : expr ℤ -> expr ℤ -> UnderLets (expr P))
+ (x0 : expr base.type.zrange) =>
+ Base
+ (#(zrange_rect)%expr @ (λ x1 x2 : var ℤ,
+ to_expr (x ($x1) ($x2)))%expr @ x0)%expr_pat
| fancy_add log2wordmax imm =>
fun x : expr (ℤ * ℤ)%etype =>
Base (#(fancy_add log2wordmax imm)%expr @ x)%expr_pat
@@ -2371,7 +2563,8 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
((let (x4, _) := args2 in x4) * (let (_, y) := args2 in y))%etype) ->
(projT1 args1)) -> (projT1 args0)) -> (projT1 args))%ptype
with
- | Some (_, _, (_, (_, _, _)), (_, (_, (_, _)), _, _), _)%zrange =>
+ | Datatypes.Some
+ (_, _, (_, (_, _, _)), (_, (_, (_, _)), _, _), _)%zrange =>
if
type.type_beq base.type base.type.type_beq
((((ℤ * ℤ)%etype -> ℤ -> (ℤ * ℤ * ℤ)%etype) ->
@@ -2391,13 +2584,14 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
xv <- ident.unify pattern.ident.Literal ##(projT2 args1);
xv0 <- ident.unify pattern.ident.Literal ##(projT2 args0);
xv1 <- ident.unify pattern.ident.Literal ##(projT2 args);
- Some
+ Datatypes.Some
(Base
- (##(fancy.interp (invert_Some (to_fancy fancy_selc))
+ (##(fancy.interp
+ (Option.invert_Some (to_fancy fancy_selc))
(let (x4, _) := xv in x4, let (x4, _) := xv0 in x4,
let (x4, _) := xv1 in x4)%zrange))%expr)
- else None
- | None => None
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end
| (@expr.Ident _ _ _ t idc @
(@expr.Ident _ _ _ t0 idc0 @ @expr.Ident _ _ _ t1 idc1 @ @expr.Ident
@@ -2410,7 +2604,8 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
_ _ _ t2 idc2) @ (_ @ _))%expr_pat |
(@expr.Ident _ _ _ t idc @
(@expr.Ident _ _ _ t0 idc0 @ @expr.Ident _ _ _ t1 idc1 @ @expr.Ident
- _ _ _ t2 idc2) @ @expr.LetIn _ _ _ _ _ _ _)%expr_pat => None
+ _ _ _ t2 idc2) @ @expr.LetIn _ _ _ _ _ _ _)%expr_pat =>
+ Datatypes.None
| (@expr.Ident _ _ _ t idc @
(@expr.Ident _ _ _ t0 idc0 @ @expr.Ident _ _ _ t1 idc1 @ ($_)%expr) @
_)%expr_pat |
@@ -2422,7 +2617,7 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
_)%expr_pat |
(@expr.Ident _ _ _ t idc @
(@expr.Ident _ _ _ t0 idc0 @ @expr.Ident _ _ _ t1 idc1 @ @expr.LetIn
- _ _ _ _ _ _ _) @ _)%expr_pat => None
+ _ _ _ _ _ _ _) @ _)%expr_pat => Datatypes.None
| (@expr.Ident _ _ _ t idc @
(@expr.Ident _ _ _ t0 idc0 @ ($_)%expr @ _) @ _)%expr_pat |
(@expr.Ident _ _ _ t idc @
@@ -2431,7 +2626,7 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
_)%expr_pat |
(@expr.Ident _ _ _ t idc @
(@expr.Ident _ _ _ t0 idc0 @ @expr.LetIn _ _ _ _ _ _ _ @ _) @ _)%expr_pat =>
- None
+ Datatypes.None
| (@expr.Ident _ _ _ t idc @ #(_) @ _)%expr_pat |
(@expr.Ident _ _ _ t idc @ ($_)%expr @ _)%expr_pat |
(@expr.Ident _ _ _ t idc @ @expr.Abs _ _ _ _ _ _ @ _)%expr_pat |
@@ -2444,10 +2639,10 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
(@expr.Ident _ _ _ t idc @ (@expr.LetIn _ _ _ _ _ _ _ @ _ @ _) @ _)%expr_pat |
(@expr.Ident _ _ _ t idc @ (@expr.LetIn _ _ _ _ _ _ _ @ _) @ _)%expr_pat |
(@expr.Ident _ _ _ t idc @ @expr.LetIn _ _ _ _ _ _ _ @ _)%expr_pat =>
- None
- | _ => None
+ Datatypes.None
+ | _ => Datatypes.None
end;;
- None);;;
+ Datatypes.None);;;
Base (#(fancy_selc)%expr @ x)%expr_pat)%option
| fancy_selm log2wordmax =>
fun x : expr (ℤ * ℤ * ℤ)%etype =>
@@ -2475,7 +2670,8 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
((let (x4, _) := args2 in x4) * (let (_, y) := args2 in y))%etype) ->
(projT1 args1)) -> (projT1 args0)) -> (projT1 args))%ptype
with
- | Some (_, _, (_, (_, _, _)), (_, (_, (_, _)), _, _), _)%zrange =>
+ | Datatypes.Some
+ (_, _, (_, (_, _, _)), (_, (_, (_, _)), _, _), _)%zrange =>
if
type.type_beq base.type base.type.type_beq
((((ℤ * ℤ)%etype -> ℤ -> (ℤ * ℤ * ℤ)%etype) ->
@@ -2495,13 +2691,14 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
xv <- ident.unify pattern.ident.Literal ##(projT2 args1);
xv0 <- ident.unify pattern.ident.Literal ##(projT2 args0);
xv1 <- ident.unify pattern.ident.Literal ##(projT2 args);
- Some
+ Datatypes.Some
(Base
- (##(fancy.interp (invert_Some (to_fancy fancy_sell))
+ (##(fancy.interp
+ (Option.invert_Some (to_fancy fancy_sell))
(let (x4, _) := xv in x4, let (x4, _) := xv0 in x4,
let (x4, _) := xv1 in x4)%zrange))%expr)
- else None
- | None => None
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end
| (@expr.Ident _ _ _ t idc @
(@expr.Ident _ _ _ t0 idc0 @ @expr.Ident _ _ _ t1 idc1 @ @expr.Ident
@@ -2514,7 +2711,8 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
_ _ _ t2 idc2) @ (_ @ _))%expr_pat |
(@expr.Ident _ _ _ t idc @
(@expr.Ident _ _ _ t0 idc0 @ @expr.Ident _ _ _ t1 idc1 @ @expr.Ident
- _ _ _ t2 idc2) @ @expr.LetIn _ _ _ _ _ _ _)%expr_pat => None
+ _ _ _ t2 idc2) @ @expr.LetIn _ _ _ _ _ _ _)%expr_pat =>
+ Datatypes.None
| (@expr.Ident _ _ _ t idc @
(@expr.Ident _ _ _ t0 idc0 @ @expr.Ident _ _ _ t1 idc1 @ ($_)%expr) @
_)%expr_pat |
@@ -2526,7 +2724,7 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
_)%expr_pat |
(@expr.Ident _ _ _ t idc @
(@expr.Ident _ _ _ t0 idc0 @ @expr.Ident _ _ _ t1 idc1 @ @expr.LetIn
- _ _ _ _ _ _ _) @ _)%expr_pat => None
+ _ _ _ _ _ _ _) @ _)%expr_pat => Datatypes.None
| (@expr.Ident _ _ _ t idc @
(@expr.Ident _ _ _ t0 idc0 @ ($_)%expr @ _) @ _)%expr_pat |
(@expr.Ident _ _ _ t idc @
@@ -2535,7 +2733,7 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
_)%expr_pat |
(@expr.Ident _ _ _ t idc @
(@expr.Ident _ _ _ t0 idc0 @ @expr.LetIn _ _ _ _ _ _ _ @ _) @ _)%expr_pat =>
- None
+ Datatypes.None
| (@expr.Ident _ _ _ t idc @ #(_) @ _)%expr_pat |
(@expr.Ident _ _ _ t idc @ ($_)%expr @ _)%expr_pat |
(@expr.Ident _ _ _ t idc @ @expr.Abs _ _ _ _ _ _ @ _)%expr_pat |
@@ -2548,10 +2746,10 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
(@expr.Ident _ _ _ t idc @ (@expr.LetIn _ _ _ _ _ _ _ @ _ @ _) @ _)%expr_pat |
(@expr.Ident _ _ _ t idc @ (@expr.LetIn _ _ _ _ _ _ _ @ _) @ _)%expr_pat |
(@expr.Ident _ _ _ t idc @ @expr.LetIn _ _ _ _ _ _ _ @ _)%expr_pat =>
- None
- | _ => None
+ Datatypes.None
+ | _ => Datatypes.None
end;;
- None);;;
+ Datatypes.None);;;
Base (#(fancy_sell)%expr @ x)%expr_pat)%option
| fancy_addm =>
fun x : expr (ℤ * ℤ * ℤ)%etype =>
@@ -2576,7 +2774,8 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
((let (x4, _) := args2 in x4) * (let (_, y) := args2 in y))%etype) ->
(projT1 args1)) -> (projT1 args0)) -> (projT1 args))%ptype
with
- | Some (_, _, (_, (_, _, _)), (_, (_, (_, _)), _, _), _)%zrange =>
+ | Datatypes.Some
+ (_, _, (_, (_, _, _)), (_, (_, (_, _)), _, _), _)%zrange =>
if
type.type_beq base.type base.type.type_beq
((((ℤ * ℤ)%etype -> ℤ -> (ℤ * ℤ * ℤ)%etype) ->
@@ -2596,13 +2795,14 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
xv <- ident.unify pattern.ident.Literal ##(projT2 args1);
xv0 <- ident.unify pattern.ident.Literal ##(projT2 args0);
xv1 <- ident.unify pattern.ident.Literal ##(projT2 args);
- Some
+ Datatypes.Some
(Base
- (##(fancy.interp (invert_Some (to_fancy fancy_addm))
+ (##(fancy.interp
+ (Option.invert_Some (to_fancy fancy_addm))
(let (x4, _) := xv in x4, let (x4, _) := xv0 in x4,
let (x4, _) := xv1 in x4)%zrange))%expr)
- else None
- | None => None
+ else Datatypes.None
+ | Datatypes.None => Datatypes.None
end
| (@expr.Ident _ _ _ t idc @
(@expr.Ident _ _ _ t0 idc0 @ @expr.Ident _ _ _ t1 idc1 @ @expr.Ident
@@ -2615,7 +2815,8 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
_ _ _ t2 idc2) @ (_ @ _))%expr_pat |
(@expr.Ident _ _ _ t idc @
(@expr.Ident _ _ _ t0 idc0 @ @expr.Ident _ _ _ t1 idc1 @ @expr.Ident
- _ _ _ t2 idc2) @ @expr.LetIn _ _ _ _ _ _ _)%expr_pat => None
+ _ _ _ t2 idc2) @ @expr.LetIn _ _ _ _ _ _ _)%expr_pat =>
+ Datatypes.None
| (@expr.Ident _ _ _ t idc @
(@expr.Ident _ _ _ t0 idc0 @ @expr.Ident _ _ _ t1 idc1 @ ($_)%expr) @
_)%expr_pat |
@@ -2627,7 +2828,7 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
_)%expr_pat |
(@expr.Ident _ _ _ t idc @
(@expr.Ident _ _ _ t0 idc0 @ @expr.Ident _ _ _ t1 idc1 @ @expr.LetIn
- _ _ _ _ _ _ _) @ _)%expr_pat => None
+ _ _ _ _ _ _ _) @ _)%expr_pat => Datatypes.None
| (@expr.Ident _ _ _ t idc @
(@expr.Ident _ _ _ t0 idc0 @ ($_)%expr @ _) @ _)%expr_pat |
(@expr.Ident _ _ _ t idc @
@@ -2636,7 +2837,7 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
_)%expr_pat |
(@expr.Ident _ _ _ t idc @
(@expr.Ident _ _ _ t0 idc0 @ @expr.LetIn _ _ _ _ _ _ _ @ _) @ _)%expr_pat =>
- None
+ Datatypes.None
| (@expr.Ident _ _ _ t idc @ #(_) @ _)%expr_pat |
(@expr.Ident _ _ _ t idc @ ($_)%expr @ _)%expr_pat |
(@expr.Ident _ _ _ t idc @ @expr.Abs _ _ _ _ _ _ @ _)%expr_pat |
@@ -2649,10 +2850,10 @@ match idc in (Compilers.ident t) return (Compile.value' true t) with
(@expr.Ident _ _ _ t idc @ (@expr.LetIn _ _ _ _ _ _ _ @ _ @ _) @ _)%expr_pat |
(@expr.Ident _ _ _ t idc @ (@expr.LetIn _ _ _ _ _ _ _ @ _) @ _)%expr_pat |
(@expr.Ident _ _ _ t idc @ @expr.LetIn _ _ _ _ _ _ _ @ _)%expr_pat =>
- None
- | _ => None
+ Datatypes.None
+ | _ => Datatypes.None
end;;
- None);;;
+ Datatypes.None);;;
Base (#(fancy_addm)%expr @ x)%expr_pat)%option
end
: Compile.value' true t