As a disclaimer, I'm fairly new to higher-level mathematics and this is my first question here, so please let me know if I need to clarify anything.
I am trying to prove that if I have some natural number $x$ that's a multiple of two other natural numbers $a$ and $b$, where $a$ and $b$ are coprime, then it's also a multiple of the least common denominator. Or, alternatively, for any $x$, there exists a $c \ge 1$ such that $abc=x$.
My basic strategy is to do a proof by induction on $a, b,$ and $x$. I am using the Coq proof assistant.
I have formulated it as follows:
$ (x \bmod a = 0) \land (x \bmod b = 0) \land (a \bmod b > 0) \land (b \bmod a > 0) \implies (x \bmod (a b)) = 0$
meaning that if some number $x$ is divisible by both $a$ and $b$` separately and $a$ and $b$ are coprime, then it's also divisible by the least common multiple of them.
I'm left with the following case to prove:
$ S x \bmod (S a * S b) = 0$
with the following premises:
$ a, b, x \in \mathbb{N} \\ H : S x \bmod S a = 0 \land S x \bmod S b = 0 \land S a \bmod S b > 0 \land S b \bmod S a > 0 \\ IHa : S x \bmod a = 0 \land S x \bmod S b = 0 \land a \bmod S b > 0 \land S b \bmod a > 0 \\ \qquad \implies S x \bmod (a * S b) = 0 \\ $
I'm hoping I'm not missing something really obvious here, but I'm a little confused about how to proceed at this point as this seems rather like a restatement of my original goal.
Again, this is my first post here, so please let me know if I need to edit.
Edit: I almost forgot, here's the proof I have so far in Coq:
Require Import Coq.Init.Nat.
(* Added for convenience - dumb name I know, but basically it says that 0 / x = 0 in every case *)
Axiom ZeroDividesAll : forall a,
0 mod a = 0.
(* I'm trying to prove that everything is a multiple of the least common multiple *)
Theorem EverythingIsAMultipleOfLCM : forall a b x : nat,
(x mod a = 0) /\ (x mod b = 0) /\ (a mod b > 0) /\ (b mod a > 0) -> (x mod (a * b)) = 0.
Proof.
intros.
(* Obviously I'm doing a proof by induction *)
induction a, b, x.
reflexivity. (* 0 mod 0 = 0 *)
apply H. (* The next few cases follow immediately from the premises *)
apply H.
apply H.
rewrite <- mult_n_O. (* This case is 0 mod (a * 0) = 0 - use the fact that a * 0 = 0 first *)
reflexivity. (* Now we're left with 0 mod 0 = 0 *)
rewrite <- mult_n_O.
apply H. (* This also follows from the inductive hypothesis *)
apply ZeroDividesAll.
(* This is where I get stuck *)