diff options
author | 2017-06-15 00:05:53 -0400 | |
---|---|---|
committer | 2017-06-15 00:05:58 -0400 | |
commit | 06b27173813d76d1459e1ff43c3b09625994ff9b (patch) | |
tree | 6fc28a89e42803b67ed4f25e75e865ca511d628d /src/Specific | |
parent | aa240918a36fe34000fb9629ff1d4fb325dd8e90 (diff) |
Added reduce to karatsuba synthesis
Diffstat (limited to 'src/Specific')
-rw-r--r-- | src/Specific/Karatsuba.v | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/src/Specific/Karatsuba.v b/src/Specific/Karatsuba.v index ce8bb86fa..e7bd35424 100644 --- a/src/Specific/Karatsuba.v +++ b/src/Specific/Karatsuba.v @@ -215,9 +215,9 @@ Ltac basesystem_partial_evaluation_RHS := [ replace_with_vm_compute t1; clear t1 | reflexivity ]. Print id_tuple_with_alt. Definition goldilocks_mul_sig : - {mul : (Z^sz -> Z^sz -> Z^(sz+half_sz))%type | + {mul : (Z^sz -> Z^sz -> Z^(sz2))%type | forall a b : Z^sz, - mul a b = goldilocks_mul_cps (n:=half_sz) (n2:=sz) wt (2 ^ 224) a b id}. + mul a b = goldilocks_mul_cps (n:=half_sz) (n2:=sz) wt (2 ^ 224) a b (fun ab => Positional.reduce_cps (n:=sz2) wt s c ab id)}. Proof. eexists; cbv beta zeta; intros. cbv [goldilocks_mul_cps]. @@ -228,7 +228,7 @@ Ltac basesystem_partial_evaluation_RHS := Defined. Definition mul_sig : - {mul : (Z^sz -> Z^sz -> Z^(sz+half_sz))%type | + {mul : (Z^sz -> Z^sz -> Z^sz2)%type | forall a b : Z^sz, let eval := Positional.Fdecode (m := m) wt in Positional.Fdecode (m := m) wt (mul a b) = (eval a * eval b)%F}. @@ -236,7 +236,7 @@ Ltac basesystem_partial_evaluation_RHS := eexists; cbv beta zeta; intros. pose proof wt_nonzero. let x := constr:( - goldilocks_mul_cps (n:=half_sz) (n2:=sz) wt (2^224) a b id) in + goldilocks_mul_cps (n:=half_sz) (n2:=sz) wt (2^224) a b (fun ab => Positional.reduce_cps (n:=sz2) wt s c ab id)) in F_mod_eq; transitivity (Positional.eval wt x); repeat autounfold; @@ -244,14 +244,14 @@ Ltac basesystem_partial_evaluation_RHS := | autorewrite with uncps push_id push_basesystem_eval; apply goldilocks_mul_correct; try assumption; cbv; congruence ]. cbv [mod_eq]; apply f_equal2; - [ | reflexivity ]; apply f_equal. - etransitivity;[|apply (proj2_sig (goldilocks_mul_sig))]. + [ | reflexivity ]. apply f_equal. + etransitivity; [|apply (proj2_sig (goldilocks_mul_sig))]. cbv [proj1_sig goldilocks_mul_sig]. reflexivity. Defined. Definition square_sig : - {square : (Z^sz -> Z^(sz+half_sz))%type | + {square : (Z^sz -> Z^sz2)%type | forall a : Z^sz, let eval := Positional.Fdecode (m := m) wt in Positional.Fdecode (m := m) wt (square a) = (eval a * eval a)%F}. @@ -331,7 +331,6 @@ Ltac basesystem_partial_evaluation_RHS := reflexivity. Defined. - (* TODO: implement reduce, reduce after mul and square Definition ring_56 := (Ring.ring_by_isomorphism (F := F m) @@ -355,7 +354,7 @@ Ltac basesystem_partial_evaluation_RHS := (proj2_sig add_sig) (proj2_sig sub_sig) (proj2_sig mul_sig) - ). *) + ). (* Eval cbv [proj1_sig add_sig] in (proj1_sig add_sig). |