diff options
author | 2017-03-29 00:12:50 -0400 | |
---|---|---|
committer | 2017-03-29 00:12:50 -0400 | |
commit | d53338e03709b3aba72e28f19f3bcbd753d5611b (patch) | |
tree | 331994d62c0e8ef028b82781f76b9310b60c1d56 /src/Reflection/Reify.v | |
parent | 16b20d1a51acb3ebc7b4b8c92a9940d1b73431c9 (diff) |
More robust reifier
We no longer need to rely on judgmental equality in the interpretation
of OpConst.
Diffstat (limited to 'src/Reflection/Reify.v')
-rw-r--r-- | src/Reflection/Reify.v | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/Reflection/Reify.v b/src/Reflection/Reify.v index ebee1c568..fd76ec4f9 100644 --- a/src/Reflection/Reify.v +++ b/src/Reflection/Reify.v @@ -359,16 +359,19 @@ Ltac Reify_rhs_gen Reify prove_interp_compile_correct interp_op try_tac := end; cbv iota beta delta [InputSyntax.Interp interp_type interp_type_gen interp_type_gen_hetero interp_flat_type interp interpf]; reflexivity)) ] ] ]. -Ltac prove_compile_correct := +Ltac prove_compile_correct_using tac := fun _ => intros; lazymatch goal with | [ |- @Syntax.Interp ?base_type_code ?interp_base_type ?op ?interp_op _ (@Compile _ _ _ ?make_const (InputSyntax.Arrow ?src (Tflat ?dst)) ?e) ?x = _ ] => apply (fun pf => @InputSyntax.Compile_correct base_type_code interp_base_type op make_const interp_op pf src dst e x); - let T := fresh in intro T; destruct T; reflexivity + solve [ tac () ] | [ |- @Syntax.Interp ?base_type_code ?interp_base_type ?op ?interp_op _ (@Compile _ _ _ ?make_const (Tflat ?T) ?e) ?x = _ ] => apply (fun pf => @InputSyntax.Compile_flat_correct_flat base_type_code interp_base_type op make_const interp_op pf T e x); - let T := fresh in intro T; destruct T; reflexivity + solve [ tac () ] end. +Ltac prove_compile_correct := + prove_compile_correct_using + ltac:(fun _ => let T := fresh in intro T; destruct T; reflexivity). Ltac Reify_rhs base_type_code interp_base_type op make_const interp_op := Reify_rhs_gen |