diff options
| author | Brian Campbell | 2018-04-04 12:05:56 +0100 |
|---|---|---|
| committer | Brian Campbell | 2018-04-04 14:45:00 +0100 |
| commit | 48f38c64fb68208d0b245f15ec2a3453ed00690f (patch) | |
| tree | 4feecabfeae990fd368c98cdccdaf340b6e911ca | |
| parent | 6d4d2b46f013e425af4f6c089fd224c9e811f761 (diff) | |
Make Type_check.solve do obvious cases immediately
| -rw-r--r-- | src/type_check.ml | 33 |
1 files changed, 18 insertions, 15 deletions
diff --git a/src/type_check.ml b/src/type_check.ml index 9db1f417..cc88c159 100644 --- a/src/type_check.ml +++ b/src/type_check.ml @@ -1174,21 +1174,24 @@ let prove_z3 env nc = let solve env nexp = typ_print ("Solve " ^ string_of_list ", " string_of_n_constraint (Env.get_constraints env) ^ " |- " ^ string_of_nexp nexp ^ " = ?"); - let bindings = ref KBindings.empty in - let fresh_var kid = - let n = KBindings.cardinal !bindings in - bindings := KBindings.add kid n !bindings; - n - in - let var_of kid = - try KBindings.find kid !bindings with - | Not_found -> fresh_var kid - in - let env = Env.add_typ_var (mk_kid "solve#") BK_nat env in - let constr = Constraint.conj (nc_constraints env var_of (Env.get_constraints env)) - (nc_constraint env var_of (nc_eq (nvar (mk_kid "solve#")) nexp)) - in - Constraint.solve_z3 constr (var_of (mk_kid "solve#")) + match nexp with + | Nexp_aux (Nexp_constant n,_) -> Some n + | _ -> + let bindings = ref KBindings.empty in + let fresh_var kid = + let n = KBindings.cardinal !bindings in + bindings := KBindings.add kid n !bindings; + n + in + let var_of kid = + try KBindings.find kid !bindings with + | Not_found -> fresh_var kid + in + let env = Env.add_typ_var (mk_kid "solve#") BK_nat env in + let constr = Constraint.conj (nc_constraints env var_of (Env.get_constraints env)) + (nc_constraint env var_of (nc_eq (nvar (mk_kid "solve#")) nexp)) + in + Constraint.solve_z3 constr (var_of (mk_kid "solve#")) let prove env (NC_aux (nc_aux, _) as nc) = let compare_const f (Nexp_aux (n1, _)) (Nexp_aux (n2, _)) = |
