tex title = "Proof that square root of 2 is not rational" author = "Christophe Raffalli, Paul Rozière" institute = "LAMA, Universit\\'e de Savoie, PPS, Universit\\'e Paris VII" documents = math . Import nat. flag auto_lvl 1. (* Cette preuve est à peu près celle envoyée à F. Wiedijk -- Nijmegen -- The Fifteen Provers of the World -- http://www.cs.kun.nl/~freek/comparison/index.html Voir une preuve plus simple : sqrt2.phx *) (*! math \section{The library:} The theorem used \underline{explicitely} from the library are \begin{itemize} \item \verb#demorganl# a set of rewrite rules for Demorgan's law. \item \verb#calcul.N# a set of rewrite rules for natural numbers. \item \verb#well_founded.N#: \[ $$well_founded.N \]. \item \verb#odd_or_even.N#: \[ $$odd_or_even.N \]. \item \verb#lesseq.case1.N#: \[ $$lesseq.case1.N \]. \item \verb#neq.less_or_sup.N#: \[ $$neq.less_or_sup.N \]. \item \verb#not.lesseq.imply.less.N#: \[ $$not.lesseq.imply.less.N \]. \item \verb#lesseq.imply.not.greater.N#: \[ $$lesseq.imply.not.greater.N \]. \end{itemize} Comments: The first four are natural to use explicitely. The last two could probably be removed by adding some \verb#new_intro# or \verb#new_elim# in the library. \verb#lesseq.case1.N# and \verb#neq.less_or_sup.N# are more problematic, they would require to extend the system with some kind of binary elimination rule (with two principal premices ?). \section{Some basic lemmas.} They should be included in the library ? *) theorem minimal.element /\X (\/n:N X n -> \/n:N (X n & /\p:N (X p -> n <= p))). (*! math \begin{lemma}\label{minimal.element} Every non empty subset \[ X \] of \[ N \] admits a minimal element: $$ \[ $0 \] $$ \end{lemma} *) intro 2. by_absurd. rewrite_hyp H0 demorganl. (*! math \begin{proof} We assume \[ $$H \] and \[ $$H0 \] ( \[ H0 \] ). *) use /\n:N ~ X n. (*! math We get a contradiction from \[ $$G \] which is proven by well founded induction: *) trivial. intros. elim well_founded.N with H1. intros. (*! math we assume \[ $$H3 \] and must prove \[ $0 \]. *) intro. apply H0 with H4. lefts G $& $\/. (*! math Assuming \[ $$H4 \] and using ( \[ H0 \] ) we get an integer \[ x \] such that \[ $$H6 \] and \[ $$H7 \]. This gives a contradiction with \[ $$H3 \]. \end{proof} *) elim H3 with H5. elim not.lesseq.imply.less.N. save. theorem not_odd_and_even.N /\x,y,z:N (~ (x = N2 * y & x = N1 + N2 * z)). (*! math \begin{lemma}\label{not_odd_and_even.N} An integer can not be odd and even: $$ \[ $0 \] $$ \end{lemma} \begin{proof} By induction over \[ x \]. \end{proof} *) intro 2. elim H. trivial 6. intros. intro. left H4. elim H2 with [case]. trivial =H0 H4 H6. elim H1. axiom H3. axiom H6. intro. rmh H4. left H5. rmh H5. rewrite_hyp H4 H7 calcul.N. left H4. axiom H4. save. theorem sum_square.N /\x,y:N (x + y)^N2 = x^N2 + N2*x*y + y^N2. (*! math \begin{lemma}\label{sum_square.N} $$ \[ $0 \] $$ \end{lemma} \begin{proof} Easy. \end{proof} *) intros. rewrite calcul.N mul.left.distributive.N mul.right.distributive.N add.associative.N. intro. save. fact less.exp.N /\n,x,y:N( x <= y -> x^n <= y^n). (*! math \begin{lemma}\label{less.exp.N} $$ \[ $0 \] $$ \end{lemma} \begin{proof} By induction on \[ n \]. \end{proof} *) intros. elim H. trivial. rewrite calcul.N. trivial. save. fact less_r.exp.N /\n,x,y:N( x^n < y^n -> x < y). (*! math \begin{lemma}\label{less_r.exp.N} $$ \[ $0 \] $$ \end{lemma} \begin{proof} Follows from lemma \ref{less.exp.N}. \end{proof} *) intros. elim lesseq.case1.N with y and x. apply less.exp.N with n and H3. elim lesseq.imply.not.greater.N with y^n and x^n ;; Try intros. save. fact less.ladd.N /\x,y:N (N0 < y -> x < x + y). (*! math \begin{lemma}\label{less.ladd.N} $$ \[ $0 \] $$ \end{lemma} \begin{proof} Easy induction over \[ x \]. \end{proof} *) intros. elim H. rewrite calcul.N. trivial. save. (*! math \section{The proof itself} *) theorem n.square.pair /\n:N (\/p:N n^N2=N2*p -> \/q:N n=N2*q). (*! math \begin{lemma}\label{n.square.pair} If the square of \[ n \] is even then \[ n \] is even: $$ \[ $0 \] $$ \end{lemma} \begin{proof} *) intros. lefts H0 $\/ $&. apply odd_or_even.N with H. lefts G $\/ $& $or. (*! math We assume \[ $$H1 \] ( \[ H1 \] ). We distinguish two cases. If \[ n \] is even we get what we want. *) trivial. (*! math If \[ n \] is odd we have \[ $$H3 \] *) prove n^N2 = N2*(N2*y^N2+N2*y) + N1. (*! math which implies \[ $0 \] *) rewrite H3 sum_square.N. rewrite add.associative.N mul.associative.N mul.left.distributive.N. from N1 + N4 * y + (N2 * y) ^ N2 = N1 + N4 * y + N4 * y ^ N2. intro. (*! math and this gives a contradiction by lemma \ref{not_odd_and_even.N} using ( \[ H1 \] ) \end{proof} *) elim not_odd_and_even.N with N (n^N2). intros. select 3. intro. axiom H1. axiom G. axiom H0. intros. save. lem decrease /\m,n : N (m^ N2 = N2 * n^ N2 -> N0 < n -> n < m). (*! math \begin{lemma}\label{decrease} $$ \[ $0 \] $$ \end{lemma} \begin{proof} Using lemma \ref{less_r.exp.N} and lemma \ref{less.ladd.N} \end{proof} *) intros. elim less_r.exp.N with N2 ;; Try intros. prove m^N2 = n^N2 + n^N2. axiom H1. elim less.ladd.N ;; Try intros. trivial. trivial. trivial =H0 H2. save. lem sup_zero /\m,n : N (m^ N2 = N2 * n^ N2 -> N0 < m -> N0 < n). (*! math \begin{lemma}\label{sup_zero} $$ \[ $0 \] $$ \end{lemma} \begin{proof} Using lemma \[ $$ neq.less_or_sup.N \] from the library. \end{proof} *) intros. elim neq.less_or_sup.N with N0 and n ;; Try intros. rewrite_hyp H1 H3 calcul.N. trivial. trivial. save. def Q m = m > N0 & \/n:N (m^ N2 = N2 * n^ N2). (*! math \begin{definition} We define \[ Q m = $$Q m \]. \end{definition} *) lem dec /\m:N (Q m -> \/m':N (Q m' & m' < m)). (*! math \begin{lemma}\label{dec} $$ \[ $0 \] $$ \end{lemma} \begin{proof} *) intros. lefts H0 $Q $\/ $&. (*! math We assume that \[ $$H0 \] and \[ $$H2 \] (\[ H2 \]) and we must prove \[ $0 \]. *) apply sup_zero with H2 and H0. (*! math By lemma \ref{sup_zero} we get \[ $$G \]. We show that \[ n \] is the integer we are looking for. *) intro. instance ?1 n. intros. intros. trivial. (*! math We just need to prove \[ $0 \] and \[1 $0 \]. *) prove \/p:N (m ^ N2 = N2 * p). intro. instance ?2 n^N2. trivial. apply n.square.pair with G0. lefts G1 $& $\/. (*! math Using lemma \ref{n.square.pair} we get \[ q \] such that \[ $$H4 \] *) prove n ^N2 = N2 * q ^N2. rewrite_hyp H2 H4. prove N2 * (N2 * q ^N2) = N2 * n ^ N2. from H2. left G1. intro. (*! math and then \[ $$G1 \]. *) trivial =H3 G1. (*! math Finally \[ $0 \] follows from lemma \ref{decrease}. \end{proof} *) elim decrease. save. lem sq2_irrat /\m:N ~Q m. (*! math \begin{lemma}\label{sq2_irrat} $$ \[ $0 \] $$ \end{lemma} \begin{proof} Follows from the previous lemma by selecting the minimal element in \[ Q \] (using lemme \ref{minimal.element}) and getting a contradiction. \end{proof} *) intros. intro. elim minimal.element with Q. intros $\/ $&. axiom H. axiom H0. lefts H1. elim dec with H2. lefts H4. apply H3 with H5. elim lesseq.imply.not.greater.N with n and m'. save. theorem square2_irrat /\m,n : N (m^ N2 = N2 * n^ N2 -> m = N0 & n = N0). (*! math \begin{theorem} The square-root of 2 is irrational. For this we just need to prove the following: $$ \[ $0 \] $$ \end{theorem} \begin{proof} *) intros. apply sq2_irrat with H. (*! math We assume \[ $$H1 \]. By the previous lemma we have \[ $$G \]. *) elim H with [case]. intro. intro. (*! math If \[ $$H2 \] we easely get \[ $0 \]. *) elim H0 with [case]. intro. rewrite_hyp H1 H2 H4 calcul.N. left H1;; intros. prove Q m. (*! math If \[ m > N0 \] then we have \[ Q m \] and a contradiction. \end{proof} *) intros $Q $\/ $&. trivial. select 2. axiom H1. trivial. elim G. save.