# Re: [isabelle] Type change

Gabriele,
On Tuesday 24 October 2006 12:13, Gabriele Pozzani wrote:
> I have a formula involving the "mod" operator and so on nat type, but when
> I eliminate the "mod" operator using the rule Divides.mod_eqD or
> Divides.mod_eq_0D I want use the int type.
>
> In particular I have:
> (k - (j - Suc 0)) mod n = (0::nat)
> eliminate the mod operator obtaining:
> EXISTS q. (k - (j - Suc 0)) = n * q
> but in natural if q is 0 then (k - (j - Suc 0)) --> k <= (j - Suc
> 0) not k = (j - Suc 0).
in fact anything that would allow you to deduce "k = j - Suc 0" from your
premise would be unsound, because "k <= j - Suc 0" is a sufficient condition
for "(k - (j - Suc 0)) mod n = (0::nat)".
If subtraction on type "nat" is not accurately modelling what you want to
formalize, then maybe using type "int" in your formulas in the first place
might solve your problem.
> There is a way to change automatically the type of a formula from nat to
> int so using the integer theorems?
No, because a theorem that holds for type "nat" may not hold for type "int",
and vice versa. (One particular example is "m <= n ==> m - n = 0".)
Best,
Tjark

*This archive was generated by a fusion of
Pipermail (Mailman edition) and
MHonArc.*