src/HOL/Tools/SMT/z3_proof_tools.ML
changeset 40274 6486c610a549
parent 40164 57f5db2a48a3
child 40579 98ebd2300823
equal deleted inserted replaced
40273:364aa76f7e21 40274:6486c610a549
   202       | @{term Not} $ _ => abstr1 cvs ct
   202       | @{term Not} $ _ => abstr1 cvs ct
   203       | @{term HOL.conj} $ _ $ _ => abstr2 cvs ct
   203       | @{term HOL.conj} $ _ $ _ => abstr2 cvs ct
   204       | @{term HOL.disj} $ _ $ _ => abstr2 cvs ct
   204       | @{term HOL.disj} $ _ $ _ => abstr2 cvs ct
   205       | @{term HOL.implies} $ _ $ _ => abstr2 cvs ct
   205       | @{term HOL.implies} $ _ $ _ => abstr2 cvs ct
   206       | Const (@{const_name HOL.eq}, _) $ _ $ _ => abstr2 cvs ct
   206       | Const (@{const_name HOL.eq}, _) $ _ $ _ => abstr2 cvs ct
   207       | Const (@{const_name distinct}, _) $ _ =>
   207       | Const (@{const_name SMT.distinct}, _) $ _ =>
   208           if ext_logic then abs_arg (abs_list abstr fresh_abstraction) cvs ct
   208           if ext_logic then abs_arg (abs_list abstr fresh_abstraction) cvs ct
   209           else fresh_abstraction cvs ct
   209           else fresh_abstraction cvs ct
   210       | Const (@{const_name If}, _) $ _ $ _ $ _ =>
   210       | Const (@{const_name If}, _) $ _ $ _ $ _ =>
   211           if ext_logic then abstr3 cvs ct else fresh_abstraction cvs ct
   211           if ext_logic then abstr3 cvs ct else fresh_abstraction cvs ct
   212       | Const (@{const_name All}, _) $ _ =>
   212       | Const (@{const_name All}, _) $ _ =>
   261 
   261 
   262   fun set_conv ct =
   262   fun set_conv ct =
   263     (Conv.rewrs_conv [set1, set2, set3, set4] else_conv
   263     (Conv.rewrs_conv [set1, set2, set3, set4] else_conv
   264     (Conv.rewr_conv set5 then_conv Conv.arg_conv set_conv)) ct
   264     (Conv.rewr_conv set5 then_conv Conv.arg_conv set_conv)) ct
   265 
   265 
   266   val dist1 = @{lemma "distinct [] == ~False" by simp}
   266   val dist1 = @{lemma "SMT.distinct [] == ~False" by (simp add: distinct_def)}
   267   val dist2 = @{lemma "distinct [x] == ~False" by simp}
   267   val dist2 = @{lemma "SMT.distinct [x] == ~False" by (simp add: distinct_def)}
   268   val dist3 = @{lemma "distinct (x # xs) == x ~: set xs & distinct xs"
   268   val dist3 = @{lemma "SMT.distinct (x # xs) == x ~: set xs & distinct xs"
   269     by simp}
   269     by (simp add: distinct_def)}
   270 
   270 
   271   fun binop_conv cv1 cv2 = Conv.combination_conv (Conv.arg_conv cv1) cv2
   271   fun binop_conv cv1 cv2 = Conv.combination_conv (Conv.arg_conv cv1) cv2
   272 in
   272 in
   273 fun unfold_distinct_conv ct =
   273 fun unfold_distinct_conv ct =
   274   (Conv.rewrs_conv [dist1, dist2] else_conv
   274   (Conv.rewrs_conv [dist1, dist2] else_conv