src/HOL/arith_data.ML
changeset 14506 6807f524ac4d
parent 14368 2763da611ad9
child 14507 0af3da3beae8
equal deleted inserted replaced
14505:e2373489d373 14506:6807f524ac4d
   228   {splits = splits, inj_consts = inj_consts, discrete = d :: discrete, presburger= presburger});
   228   {splits = splits, inj_consts = inj_consts, discrete = d :: discrete, presburger= presburger});
   229 
   229 
   230 fun arith_inj_const c = ArithTheoryData.map (fn {splits,inj_consts,discrete,presburger} =>
   230 fun arith_inj_const c = ArithTheoryData.map (fn {splits,inj_consts,discrete,presburger} =>
   231   {splits = splits, inj_consts = c :: inj_consts, discrete = discrete, presburger = presburger});
   231   {splits = splits, inj_consts = c :: inj_consts, discrete = discrete, presburger = presburger});
   232 
   232 
       
   233 
       
   234 (* A FIXME to avoid excessive case splits when ~= is split into < and >:
       
   235    ignore ~= altogether.
       
   236 *)
       
   237 
       
   238 val ignore_neq = ref false;
   233 
   239 
   234 structure LA_Data_Ref: LIN_ARITH_DATA =
   240 structure LA_Data_Ref: LIN_ARITH_DATA =
   235 struct
   241 struct
   236 
   242 
   237 (* Decomposition of terms *)
   243 (* Decomposition of terms *)
   331      | "op <=" => Some(p,i,"<=",q,j)
   337      | "op <=" => Some(p,i,"<=",q,j)
   332      | "op ="  => Some(p,i,"=",q,j)
   338      | "op ="  => Some(p,i,"=",q,j)
   333      | _       => None
   339      | _       => None
   334   end handle Zero => None;
   340   end handle Zero => None;
   335 
   341 
   336 fun negate(Some(x,i,rel,y,j,d)) = Some(x,i,"~"^rel,y,j,d)
   342 fun negate(Some(x,i,rel,y,j,d)) =
       
   343       if rel = "=" andalso !ignore_neq then None else Some(x,i,"~"^rel,y,j,d)
   337   | negate None = None;
   344   | negate None = None;
   338 
   345 
   339 fun decomp1 (discrete,inj_consts) (T,xxx) =
   346 fun decomp1 (discrete,inj_consts) (T,xxx) =
   340   (case T of
   347   (case T of
   341      Type("fun",[Type(D,[]),_]) =>
   348      Type("fun",[Type(D,[]),_]) =>