src/Provers/Arith/cancel_div_mod.ML
changeset 33040 cffdb7b28498
parent 33038 8f9594c31de4
child 33049 c38f02fdf35d
equal deleted inserted replaced
33039:5018f6a76b3f 33040:cffdb7b28498
    63   let val ts = Data.dest_sum t;
    63   let val ts = Data.dest_sum t;
    64       val dpq = Data.mk_binop Data.div_name pq
    64       val dpq = Data.mk_binop Data.div_name pq
    65       val d1 = mk_times (snd pq,dpq) and d2 = mk_times (dpq,snd pq)
    65       val d1 = mk_times (snd pq,dpq) and d2 = mk_times (dpq,snd pq)
    66       val d = if d1 mem ts then d1 else d2
    66       val d = if d1 mem ts then d1 else d2
    67       val m = Data.mk_binop Data.mod_name pq
    67       val m = Data.mk_binop Data.mod_name pq
    68   in mk_plus(mk_plus(d,m),Data.mk_sum(ts \ d \ m)) end
    68   in mk_plus(mk_plus(d,m),Data.mk_sum(ts |> remove (op =) d |> remove (op =) m)) end
    69 
    69 
    70 fun cancel ss t pq =
    70 fun cancel ss t pq =
    71   let val teqt' = Data.prove_eq_sums ss (t, rearrange t pq)
    71   let val teqt' = Data.prove_eq_sums ss (t, rearrange t pq)
    72   in hd (Data.div_mod_eqs RL [teqt' RS transitive_thm]) end;
    72   in hd (Data.div_mod_eqs RL [teqt' RS transitive_thm]) end;
    73 
    73