aboutsummaryrefslogtreecommitdiff
path: root/src/Specific/Framework/ArithmeticSynthesis/HelperTactics.v
diff options
context:
space:
mode:
Diffstat (limited to 'src/Specific/Framework/ArithmeticSynthesis/HelperTactics.v')
-rw-r--r--src/Specific/Framework/ArithmeticSynthesis/HelperTactics.v121
1 files changed, 0 insertions, 121 deletions
diff --git a/src/Specific/Framework/ArithmeticSynthesis/HelperTactics.v b/src/Specific/Framework/ArithmeticSynthesis/HelperTactics.v
deleted file mode 100644
index 0a2d5dafc..000000000
--- a/src/Specific/Framework/ArithmeticSynthesis/HelperTactics.v
+++ /dev/null
@@ -1,121 +0,0 @@
-Require Import Coq.ZArith.ZArith Coq.ZArith.BinIntDef.
-Require Import Crypto.Arithmetic.Core. Import B.
-Require Import Crypto.Arithmetic.PrimeFieldTheorems.
-Require Crypto.Arithmetic.Saturated.Wrappers.
-Require Import Crypto.Util.ZUtil.ModInv.
-Require Import Crypto.Util.Tactics.CacheTerm.
-Require Import Crypto.Util.Decidable.
-Require Crypto.Util.Tuple.
-
-Local Notation tuple := Tuple.tuple.
-Local Open Scope list_scope.
-Local Open Scope Z_scope.
-Local Infix "^" := tuple : type_scope.
-
-Ltac if_cond_else cond tac default id :=
- lazymatch (eval compute in cond) with
- | true => tac id
- | false => default
- end.
-Ltac if_cond cond tac id := if_cond_else cond tac (0%Z) id.
-
-Ltac pose_modinv modinv_fuel a modulus modinv :=
- let v0 := constr:(Option.invert_Some (Z.modinv_fueled modinv_fuel a modulus)) in
- let v := (eval vm_compute in v0) in
- let v := lazymatch type of v with (* if the computation failed, display a reasonable error message about the attempted computation *)
- | Z => v
- | _ => (eval cbv -[Option.invert_Some Z.modinv_fueled] in v0)
- end in
- let v := (eval vm_compute in (v <: Z)) in
- cache_term v modinv.
-Ltac pose_correct_if_Z v mkeqn id :=
- let T := type of v in
- let eqn :=
- lazymatch (eval vm_compute in T) with
- | Z => mkeqn ()
- | ?T
- => let v := (eval vm_compute in v) in
- lazymatch T with
- | option _
- => lazymatch v with
- | None => constr:(v = v)
- end
- | unit
- => lazymatch v with
- | tt => constr:(tt = tt)
- end
- end
- end in
- cache_proof_with_type_by
- eqn
- ltac:(vm_compute; reflexivity)
- id.
-
-Ltac pose_proof_tuple ls :=
- let t := type of ls in
- lazymatch ls with
- | prod ?x ?y => pose_proof_tuple x; pose_proof_tuple y
- | conj ?x ?y => pose_proof_tuple x; pose_proof_tuple y
- | _
- => lazymatch eval hnf in t with
- | prod ?x ?y => pose_proof_tuple (fst ls); pose_proof_tuple (snd ls)
- | and ?x ?y => pose_proof_tuple (proj1 ls); pose_proof_tuple (proj2 ls)
- | _ => pose proof ls
- end
- end.
-
-Ltac make_chained_carries_cps sz wt s c a carry_chains :=
- (eval cbv [Positional.chained_carries_reduce_cps Positional.chained_carries_reduce_cps_step carry_chains] in
- (Positional.chained_carries_reduce_cps sz wt s c a carry_chains id)).
-
-Ltac specialize_existing_sig existing_sig :=
- lazymatch type of existing_sig with
- | ?T -> _
- => let H := fresh "existing_sig_subproof" in
- let H := cache_proof_with_type_by
- T
- ltac:(vm_decide_no_check)
- H in
- specialize_existing_sig (existing_sig H)
- | _ => existing_sig
- end.
-
-Ltac cache_sig_with_type_by_existing_sig_helper cbv_tac ty existing_sig id :=
- let existing_sig := specialize_existing_sig existing_sig in
- cache_sig_with_type_by
- ty
- ltac:(eexists; intros; etransitivity;
- [ apply f_equal
- | solve [ eapply (proj2_sig existing_sig); eassumption ] ];
- do 2 (cbv [proj1_sig
- Positional.chained_carries_reduce_cps Positional.chained_carries_reduce_cps_step
- Positional.mul_cps Positional.reduce_cps];
- cbv_tac ());
- repeat autounfold;
- let next_step _ := basesystem_partial_evaluation_RHS_gen Wrappers.basesystem_partial_evaluation_unfolder in
- lazymatch goal with
- | [ |- _ = match ?code with
- | None => _
- | _ => _
- end ]
- => let c := (eval hnf in code) in
- change code with c;
- cbv beta iota;
- lazymatch c with
- | None => next_step ()
- | _ => idtac
- end
- | _ => next_step ()
- end;
- do_replace_match_with_destructuring_match_in_goal;
- reflexivity)
- id.
-
-Ltac solve_constant_sig :=
- idtac;
- lazymatch goal with
- | [ |- { c : Z^?sz | Positional.Fdecode (m:=?M) ?wt c = ?v } ]
- => let t := (eval vm_compute in
- (Positional.encode (n:=sz) (modulo_cps:=@modulo_cps) (div_cps:=@div_cps) wt (F.to_Z (m:=M) v))) in
- (exists t; vm_decide)
- end.