aboutsummaryrefslogtreecommitdiff
path: root/src/Util/SideConditions/Autosolve.v
diff options
context:
space:
mode:
authorGravatar Jason Gross <jgross@mit.edu>2017-11-07 15:38:32 -0500
committerGravatar Jason Gross <jgross@mit.edu>2017-11-07 15:38:32 -0500
commit601c2aeaab47edf2cc8dc705e712fb89b96f5ff9 (patch)
treeb57385e30eb54e00239a24cb63d4f7943506e438 /src/Util/SideConditions/Autosolve.v
parent39c12e5c7225fd30dbe2364b208f4764f1fdb457 (diff)
Allow pre-unfolding of autosolve things
Diffstat (limited to 'src/Util/SideConditions/Autosolve.v')
-rw-r--r--src/Util/SideConditions/Autosolve.v51
1 files changed, 24 insertions, 27 deletions
diff --git a/src/Util/SideConditions/Autosolve.v b/src/Util/SideConditions/Autosolve.v
index 90c317742..3873ff7b9 100644
--- a/src/Util/SideConditions/Autosolve.v
+++ b/src/Util/SideConditions/Autosolve.v
@@ -13,30 +13,27 @@ Notation vm_compute_evar_package := vm_compute_evar_package_vm_small.
Definition vm_cast_evar_package {s} (v : s) d := @evard_package s d v.
Definition cast_evar_package {s} (v : s) d := @evard_package s d v.
-Module Internal.
- Ltac autosolve else_tac :=
- lazymatch goal with
- | [ |- vm_decide_package ?P ] => cbv beta delta [vm_decide_package]; vm_decide
- | [ |- cbv_minus_then_vm_decide_package ?ident ?P ] => cbv -[ident]; vm_decide
- | [ |- vm_compute_reflexivity_package ?P ] => vm_compute; reflexivity
- | [ |- vm_compute_evar_package_vm_small ?v ]
- => let v' := (eval vm_compute in v) in
- (exists v'); abstract vm_cast_no_check (eq_refl v')
- | [ |- vm_compute_evar_package_vm_large ?v ]
- => let v' := (eval vm_compute in v) in
- (exists v'); abstract vm_cast_no_check (eq_refl v)
- | [ |- vm_cast_evar_package ?v ?d ]
- => unshelve eexists (v <: d);
- [ vm_compute; reflexivity
- | cbv beta;
- let lhs := lazymatch goal with |- ?lhs = _ => lhs end in
- abstract exact_no_check (eq_refl lhs) ]
- | [ |- cast_evar_package (s:=?s) ?v ?d ]
- => exact (@Build_evard_package
- s d v
- v eq_refl eq_refl)
- | _ => else_tac ()
- end.
-End Internal.
-
-Ltac autosolve ::= Internal.autosolve.
+Ltac autosolve else_tac :=
+ CorePackages.preautosolve ();
+ lazymatch goal with
+ | [ |- vm_decide_package ?P ] => cbv beta delta [vm_decide_package]; vm_decide
+ | [ |- cbv_minus_then_vm_decide_package ?ident ?P ] => cbv -[ident]; vm_decide
+ | [ |- vm_compute_reflexivity_package ?P ] => vm_compute; reflexivity
+ | [ |- vm_compute_evar_package_vm_small ?v ]
+ => let v' := (eval vm_compute in v) in
+ (exists v'); abstract vm_cast_no_check (eq_refl v')
+ | [ |- vm_compute_evar_package_vm_large ?v ]
+ => let v' := (eval vm_compute in v) in
+ (exists v'); abstract vm_cast_no_check (eq_refl v)
+ | [ |- vm_cast_evar_package ?v ?d ]
+ => unshelve eexists (v <: d);
+ [ vm_compute; reflexivity
+ | cbv beta;
+ let lhs := lazymatch goal with |- ?lhs = _ => lhs end in
+ abstract exact_no_check (eq_refl lhs) ]
+ | [ |- cast_evar_package (s:=?s) ?v ?d ]
+ => exact (@Build_evard_package
+ s d v
+ v eq_refl eq_refl)
+ | _ => CorePackages.autosolve else_tac
+ end.