src/Provers/Arith/cancel_div_mod.ML
changeset 36692 54b64d4ad524
parent 35267 8dfd816713c6
child 43594 ef1ddc59b825
equal deleted inserted replaced
36674:d95f39448121 36692:54b64d4ad524
    60 
    60 
    61 fun rearrange t pq =
    61 fun rearrange t pq =
    62   let val ts = Data.dest_sum t;
    62   let val ts = Data.dest_sum t;
    63       val dpq = Data.mk_binop Data.div_name pq
    63       val dpq = Data.mk_binop Data.div_name pq
    64       val d1 = mk_times (snd pq,dpq) and d2 = mk_times (dpq,snd pq)
    64       val d1 = mk_times (snd pq,dpq) and d2 = mk_times (dpq,snd pq)
    65       val d = if d1 mem ts then d1 else d2
    65       val d = if member (op =) ts d1 then d1 else d2
    66       val m = Data.mk_binop Data.mod_name pq
    66       val m = Data.mk_binop Data.mod_name pq
    67   in mk_plus(mk_plus(d,m),Data.mk_sum(ts |> remove (op =) d |> remove (op =) m)) end
    67   in mk_plus(mk_plus(d,m),Data.mk_sum(ts |> remove (op =) d |> remove (op =) m)) end
    68 
    68 
    69 fun cancel ss t pq =
    69 fun cancel ss t pq =
    70   let val teqt' = Data.prove_eq_sums ss (t, rearrange t pq)
    70   let val teqt' = Data.prove_eq_sums ss (t, rearrange t pq)