Advertisement
Guest User

Untitled

a guest
Jun 26th, 2020
45
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 18.82 KB | None | 0 0
  1. (* dans le commentaire ci-dessous,placer le curseur entre la parenthèse fermante après
  2. cl_extra, et le "*" puis faire ctrl x - ctrl e pour lancer proof-general*)
  3.  
  4. (* (load-library "cl-extra") *)
  5.  
  6. Section fractions_entiers_naturels.
  7.  
  8. Inductive Fraction: Set:=
  9. |frac: nat -> nat -> Fraction.
  10.  
  11. Inductive f_eq: Fraction -> Fraction -> Prop:=
  12. |f_refl: forall x:Fraction, f_eq x x
  13. |f_sym: forall x y:Fraction, f_eq x y -> f_eq y x
  14. |f_trans: forall x y z:Fraction, f_eq x y -> f_eq y z -> f_eq x z
  15. |f_eq_prod: forall a b c:nat,
  16. b<>0 -> c<>0 -> f_eq (frac a b) (frac (a * c) (b * c)).
  17.  
  18. Definition f_somme (x y:Fraction):=
  19. match x with
  20. | frac a b => match y with
  21. |frac c d => frac ((a * d)+(b * c)) (b*d)
  22. end
  23. end.
  24.  
  25. Theorem eq_zeitnot: f_eq (f_somme (frac 2 7) (frac 3 7)) (frac 5 7).
  26. Proof.
  27. simpl.
  28. apply f_sym.
  29. apply f_eq_prod with (c:=7).
  30. discriminate.
  31. discriminate.
  32. Qed.
  33.  
  34. Definition numerateur (p:Fraction):nat:=match p with | frac a b => a end.
  35. Definition denominateur (p:Fraction):nat:=match p with | frac a b => b end.
  36.  
  37. Section propriétés_des_entiers.
  38.  
  39. Theorem plus_comm: forall p q:nat, p + q = q + p.
  40. Proof.
  41. induction p.
  42. intros.
  43. simpl.
  44. rewrite <- plus_n_O.
  45. reflexivity.
  46. intros.
  47. rewrite <- plus_n_Sm.
  48. simpl.
  49. rewrite IHp.
  50. reflexivity.
  51. Qed.
  52.  
  53. Theorem plus_asso: forall p q r:nat, (p + q) + r = p + (q + r).
  54. Proof.
  55. induction p.
  56. intros.
  57. simpl.
  58. reflexivity.
  59. intros.
  60. rewrite plus_Sn_m.
  61. rewrite plus_Sn_m.
  62. rewrite plus_Sn_m.
  63. rewrite IHp.
  64. reflexivity.
  65. Qed.
  66.  
  67. Theorem distributivite_droite: forall x y z:nat, (x+y)*z = (x*z)+(y*z).
  68. Proof.
  69. induction x.
  70. simpl.
  71. reflexivity.
  72. simpl.
  73. intros.
  74. assert (z+ x * z + y * z = z + (x * z + y * z)).
  75. apply plus_asso.
  76. rewrite H.
  77. apply f_equal.
  78. apply IHx.
  79. Qed.
  80.  
  81. Theorem mult_comm: forall x y:nat, x*y = y*x.
  82. Proof.
  83. induction x.
  84. simpl.
  85. intro.
  86. rewrite <- mult_n_O.
  87. reflexivity.
  88. simpl.
  89. assert (forall a b:nat, b * (S a) = b + b * a).
  90. induction b.
  91. simpl.
  92. reflexivity.
  93. simpl.
  94. rewrite IHb.
  95. apply f_equal.
  96. rewrite <- plus_asso.
  97. rewrite <- plus_asso.
  98. rewrite plus_comm with (p:=a) (q:=b).
  99. reflexivity.
  100. intro.
  101. apply eq_sym.
  102. rewrite IHx.
  103. apply H.
  104. Qed.
  105.  
  106. Theorem mult_asso: forall x y z:nat, x*(y*z)=(x*y)*z.
  107. Proof.
  108. induction x.
  109. intros.
  110. simpl.
  111. reflexivity.
  112. simpl.
  113. intros.
  114. rewrite distributivite_droite.
  115. rewrite IHx.
  116. reflexivity.
  117. Qed.
  118.  
  119. Theorem distributivite_gauche: forall x y z:nat, z*(x+y)= (z*x)+(z*y).
  120. Proof.
  121. intros.
  122. rewrite mult_comm with (x:=z) (y:= x+ y).
  123. rewrite mult_comm with (x:=z) (y:=x).
  124. rewrite mult_comm with (x:=z) (y:=y).
  125. apply distributivite_droite.
  126. Qed.
  127.  
  128. Theorem un_neutre_mult: forall n:nat, n * 1 = n.
  129. Proof.
  130. induction n.
  131. simpl.
  132. reflexivity.
  133. simpl.
  134. rewrite IHn.
  135. reflexivity.
  136. Qed.
  137.  
  138. End propriétés_des_entiers.
  139.  
  140. Section propriétés_de_l'égalité_entre_fractions.
  141.  
  142. Lemma nat_regulier: forall x y:nat, x<> 0 -> y <> 0 -> x*y <> 0.
  143. Proof.
  144. induction x.
  145. intros y Fairy.
  146. apply False_ind.
  147. apply Fairy.
  148. reflexivity.
  149. intros y NNSx NNy.
  150. simpl.
  151. destruct y.
  152. apply False_rect.
  153. apply NNy.
  154. reflexivity.
  155. simpl.
  156. discriminate.
  157. Qed.
  158.  
  159. Lemma nat_regulier_2: forall p q r:nat, p+q = p+r -> q=r.
  160. Proof.
  161. induction p.
  162. intros p q.
  163. simpl.
  164. intro.
  165. assumption.
  166. intros q r.
  167. simpl.
  168. intro.
  169. apply IHp.
  170. apply eq_add_S.
  171. apply H.
  172. Qed.
  173.  
  174. Lemma nat_regulier_3: forall p q r:nat,
  175. p <> 0 -> q * p = r * p -> q = r.
  176. Proof.
  177. intro.
  178. induction q.
  179. intro r.
  180. simpl.
  181. intros.
  182. destruct r.
  183. reflexivity.
  184. apply False_rect.
  185. apply eq_sym in H0.
  186. apply nat_regulier with (x:= S r) (y:=p).
  187. discriminate.
  188. assumption.
  189. assumption.
  190. intros.
  191. destruct r.
  192. assert (0*p = 0) as E.
  193. simpl; reflexivity.
  194. rewrite E in H0.
  195. absurd (S q * p = 0).
  196. apply nat_regulier.
  197. discriminate.
  198. assumption.
  199. assumption.
  200. simpl in H0.
  201. apply nat_regulier_2 in H0.
  202. apply eq_S.
  203. apply IHq.
  204. assumption.
  205. assumption.
  206. Qed.
  207.  
  208. Lemma consistance_den_non_nul: forall x y:Fraction,
  209. f_eq x y -> (denominateur x <> 0 <-> denominateur y <> 0).
  210. Proof.
  211. apply f_eq_ind.
  212. intro x.
  213. apply iff_refl.
  214. intros x y Exy Ixy.
  215. apply iff_sym.
  216. apply Ixy.
  217. intros x y z Exy Ixy Eyz.
  218. apply iff_trans.
  219. apply Ixy.
  220. intros a b c NNb NNc.
  221. simpl.
  222. split.
  223. intro NNb2.
  224. apply nat_regulier.
  225. apply NNb.
  226. apply NNc.
  227. intro NNbc.
  228. apply NNb.
  229. Qed.
  230.  
  231. Theorem caracterisation_de_l_egalite:forall a b c d:nat,
  232. b <> 0 -> d <> 0 ->
  233. (f_eq (frac a b) (frac c d) <-> a * d = b * c).
  234. Proof.
  235. intros a b c d Nb Nd.
  236. split.
  237. intro F.
  238. assert (let aux :=
  239. fun (x y:Fraction) =>
  240. denominateur x <> 0
  241. -> denominateur y <> 0
  242. -> (numerateur x) * (denominateur y) = (numerateur y) * (denominateur x)
  243. in
  244. forall p q:Fraction, f_eq p q -> aux p q)
  245. as L.
  246. apply f_eq_ind.
  247. intros.
  248. reflexivity.
  249. intros.
  250. apply eq_sym.
  251. apply H0.
  252. assumption.
  253. assumption.
  254. intros.
  255. assert (denominateur y <> 0) as Ny.
  256. apply consistance_den_non_nul with (x:=x).
  257. assumption.
  258. assumption.
  259. apply nat_regulier_3 with (p:= denominateur y).
  260. assumption.
  261. rewrite mult_comm with (x:= numerateur x * denominateur z) (y:= denominateur y).
  262. rewrite mult_asso.
  263. rewrite mult_comm with (x:= denominateur y) (y:= numerateur x).
  264. rewrite H0.
  265. rewrite <- mult_comm with (x:= denominateur x) (y:= numerateur y).
  266. rewrite <- mult_comm with (x:= denominateur x) (y:= numerateur z).
  267. rewrite <- mult_asso.
  268. rewrite <- mult_asso.
  269. rewrite H2.
  270. reflexivity.
  271. assumption.
  272. assumption.
  273. assumption.
  274. assumption.
  275. intros u v w.
  276. simpl.
  277. intros.
  278. rewrite <- mult_asso.
  279. rewrite mult_comm with (x:=v) (y:=w).
  280. reflexivity.
  281. simpl in L.
  282. assert (
  283. numerateur (frac a b) * denominateur (frac c d) =
  284. numerateur (frac c d) * denominateur (frac a b)
  285. ).
  286. apply L with (p:= frac a b) (q:= frac c d).
  287. assumption.
  288. simpl.
  289. assumption.
  290. simpl.
  291. assumption.
  292. simpl in H.
  293. rewrite mult_comm with (x:=b) (y:=c).
  294. assumption.
  295. intro.
  296. apply f_trans with (y:= frac (a * d) (b * d)).
  297. apply f_eq_prod.
  298. assumption.
  299. assumption.
  300. rewrite H.
  301. rewrite mult_comm with (x:=b) (y:=c).
  302. rewrite mult_comm with (x:=b) (y:=d).
  303. apply f_sym.
  304. apply f_eq_prod.
  305. assumption.
  306. assumption.
  307. Qed.
  308.  
  309. End propriétés_de_l'égalité_entre_fractions.
  310.  
  311. Section propriétés_arithmétiques_des_fractions.
  312.  
  313. Theorem somme_fractions_de_meme_denominateur:
  314. forall a b c:nat,
  315. c <> 0 ->
  316. f_eq (f_somme (frac a c) (frac b c)) (frac (a+b) c).
  317. Proof.
  318. intros.
  319. simpl.
  320. rewrite mult_comm with (x:= c) (y:=b).
  321. rewrite <- distributivite_droite.
  322. apply f_sym.
  323. apply f_eq_prod.
  324. assumption.
  325. assumption.
  326. Qed.
  327.  
  328. Definition f_produit (x y:Fraction):=
  329. match x with
  330. |frac a b => match y with
  331. |frac c d => frac (a * c) (b * d)
  332. end
  333. end.
  334.  
  335. Definition f_inverse (x:Fraction):=
  336. match x with
  337. |frac a b => frac b a
  338. end.
  339.  
  340. Theorem identite_inverse: forall x:Fraction,
  341. (numerateur x <> 0) -> (denominateur x <> 0) ->
  342. f_eq (f_produit x (f_inverse x)) (frac 1 1).
  343. Proof.
  344. intro x.
  345. destruct x as (a,b).
  346. intros.
  347. simpl.
  348. rewrite mult_comm with (x:=a) (y:=b).
  349. apply f_sym.
  350. assert (frac (b*a) (b*a) = frac ((b * a) * 1) ((b * a) * 1)).
  351. rewrite (un_neutre_mult).
  352. reflexivity.
  353. rewrite H1.
  354. rewrite mult_comm with (x:= b * a) (y:=1).
  355. apply f_eq_prod.
  356. discriminate.
  357. apply nat_regulier.
  358. simpl in H0.
  359. assumption.
  360. simpl in H.
  361. assumption.
  362. Qed.
  363.  
  364. Theorem somme_fractions_associative: forall x y z:Fraction,
  365. f_eq (f_somme (f_somme x y) z)
  366. (f_somme x (f_somme y z)).
  367. Proof.
  368. intros x y z.
  369. destruct x as (a,b).
  370. destruct y as (c,d).
  371. destruct z as (e,f).
  372. simpl.
  373. assert ((a * d + b * c) * f + b * d * e = a * (d * f) + b * (c * f + d * e)).
  374. apply eq_trans with (y:= a * d * f + b * c *f + b * d * e).
  375. rewrite distributivite_droite.
  376. reflexivity.
  377. rewrite mult_asso with (x:=a) (y:=d) (z:=f).
  378. rewrite plus_asso with (p:=a * d * f) (q:= b * c * f) (r:= b * d * e).
  379. rewrite distributivite_gauche with (x:= c * f) (y:= d * e) (z:= b).
  380. rewrite mult_asso with (x:=b) (y:=c) (z:=f).
  381. rewrite mult_asso with (x:=b) (y:=d) (z:=e).
  382. reflexivity.
  383. rewrite H.
  384. rewrite mult_asso with (x:=b) (y:=d) (z:=f).
  385. apply f_refl.
  386. Qed.
  387.  
  388. Theorem fractions_distributivite_droite: forall x y z:Fraction,
  389. denominateur x <> 0 ->
  390. denominateur y <> 0 ->
  391. denominateur z <> 0 ->
  392. f_eq (f_produit (f_somme x y) z)
  393. (f_somme (f_produit x z) (f_produit y z)).
  394. Proof.
  395. intros x y z.
  396. destruct x as (a,b).
  397. destruct y as (c,d).
  398. destruct z as (e,f).
  399. simpl.
  400. rewrite mult_asso with (x:= b * f) (y:=d) (z:=f).
  401. assert (((a * d + b * c) * e) * f = (a * e * (d * f) + b * f * (c * e))).
  402. rewrite distributivite_droite with (x:= a * d) (y:= b * c) (z := e).
  403. rewrite <- mult_asso with (x:= b) (y:=c) (z:=e).
  404. rewrite <- mult_asso with (x:= a) (y:=d) (z:=e).
  405. rewrite mult_comm with (x:=d) (y:=e).
  406. rewrite mult_asso with (x:= a) (y:=e) (z:=d).
  407. rewrite distributivite_droite with (x:= a * e * d) (y:= b * (c * e)) (z := f).
  408. rewrite mult_asso with (x:= a * e) (y:=d) (z:=f).
  409. rewrite <- mult_asso with (x:= b) (y:=f) (z:=c * e).
  410. rewrite mult_comm with (x:=f) (y:=c * e).
  411. rewrite mult_asso with (x:= b) (y:=c * e) (z:=f).
  412. reflexivity.
  413. rewrite <- H.
  414. intros.
  415. rewrite <- mult_asso with (x:= b) (y:=f) (z:=d).
  416. rewrite mult_comm with (x:=f) (y:=d).
  417. rewrite mult_asso with (x:= b) (y:=d) (z:=f).
  418. apply f_eq_prod.
  419. apply nat_regulier.
  420. apply nat_regulier.
  421. assumption.
  422. assumption.
  423. assumption.
  424. assumption.
  425. Qed.
  426.  
  427. Theorem somme_fractions_commutative:
  428. forall x y:Fraction,
  429. f_eq (f_somme x y) (f_somme y x).
  430. Proof.
  431. intros x y.
  432. destruct x as (a,b).
  433. destruct y as (c,d).
  434. simpl.
  435. rewrite mult_comm with (x:=b) (y:=d).
  436. rewrite mult_comm with (x:=b) (y:=c).
  437. rewrite mult_comm with (x:=a) (y:=d).
  438. rewrite plus_comm with (p:=d * a) (q:=c * b).
  439. apply f_refl.
  440. Qed.
  441.  
  442. Theorem produit_fractions_commutatif:
  443. forall x y:Fraction,
  444. f_eq (f_produit x y) (f_produit y x).
  445. Proof.
  446. intros x y.
  447. destruct x as (a,b).
  448. destruct y as (c,d).
  449. simpl.
  450. rewrite mult_comm with (x:=b) (y:=d).
  451. rewrite mult_comm with (x:=a) (y:=c).
  452. apply f_refl.
  453. Qed.
  454.  
  455. Theorem produit_fractions_associatif: forall x y z:Fraction,
  456. f_eq (f_produit (f_produit x y) z)
  457. (f_produit x (f_produit y z)).
  458. Proof.
  459. intros x y z.
  460. destruct x as (a,b).
  461. destruct y as (c,d).
  462. destruct z as (e,f).
  463. simpl.
  464. rewrite mult_asso with (x:=a) (y:=c) (z:=e).
  465. rewrite mult_asso with (x:=b) (y:=d) (z:=f).
  466. apply f_refl.
  467. Qed.
  468.  
  469. Theorem compatibility_f_eq_operations:
  470. forall x x' y y':Fraction,
  471. denominateur x <> 0 ->
  472. denominateur x' <> 0 ->
  473. denominateur y <> 0 ->
  474. denominateur y' <> 0 ->
  475. f_eq x x' -> f_eq y y' -> (f_eq (f_somme x y) (f_somme x' y') /\
  476. f_eq (f_produit x y) (f_produit x' y')).
  477. Proof.
  478. assert (let aux := fun u v:Fraction =>
  479. forall w:Fraction,denominateur w <> 0 ->
  480. ((f_eq (f_somme u w) (f_somme v w))/\
  481. (f_eq (f_produit u w) (f_produit v w)))
  482. in
  483. forall p q:Fraction, f_eq p q -> aux p q) as E.
  484. apply f_eq_ind.
  485. intros; split; apply f_refl; apply f_refl.
  486. intros x y F G w Nw;split; apply f_sym; apply G.
  487. assumption.
  488. assumption.
  489. intros x y z F G H K w Nw.
  490. split.
  491. apply f_trans with (y:= f_somme y w).
  492. apply G.
  493. assumption.
  494. apply K.
  495. assumption.
  496. apply f_trans with (y:= f_produit y w).
  497. apply G; assumption.
  498. apply K; assumption.
  499. intros a b c Nb Nc w Nw.
  500. destruct w as (e,f).
  501. simpl.
  502. assert (forall k m n:nat, k * m * n = k * n * m) as L.
  503. intros.
  504. rewrite <- mult_asso with (x:=k)(y:=m)(z:=n).
  505. rewrite <- mult_asso with (x:=k)(y:=n)(z:=m).
  506. rewrite mult_comm with (x:=m)(y:=n).
  507. reflexivity.
  508. rewrite L with (k:=a)(m:=c)(n:=e).
  509. rewrite L with (k:=a)(m:=c)(n:=f).
  510. rewrite L with (k:=b)(m:=c)(n:=e).
  511. rewrite L with (k:=b)(m:=c)(n:=f).
  512. split.
  513. rewrite <- distributivite_droite with (x:= a * f) (y:= b * e) (z:=c).
  514. apply f_eq_prod.
  515. simpl in Nw.
  516. apply nat_regulier.
  517. assumption.
  518. assumption.
  519. assumption.
  520. apply f_eq_prod.
  521. simpl in Nw.
  522. apply nat_regulier.
  523. assumption.
  524. assumption.
  525. assumption.
  526. intros; split.
  527. apply f_trans with (y:= f_somme x' y).
  528. apply E.
  529. assumption.
  530. assumption.
  531. apply f_trans with (y:= f_somme y x').
  532. apply somme_fractions_commutative.
  533. apply f_trans with (y:= f_somme y' x').
  534. apply E.
  535. assumption.
  536. assumption.
  537. apply somme_fractions_commutative.
  538. apply f_trans with (y:= f_produit x' y).
  539. apply E.
  540. assumption.
  541. assumption.
  542. apply f_trans with (y:= f_produit y x').
  543. apply produit_fractions_commutatif.
  544. apply f_trans with (y:= f_produit y' x').
  545. apply E.
  546. assumption.
  547. assumption.
  548. apply produit_fractions_commutatif.
  549. Qed.
  550.  
  551. Theorem fractions_distributivite_gauche: forall x y z:Fraction,
  552. denominateur x <> 0 ->
  553. denominateur y <> 0 ->
  554. denominateur z <> 0 ->
  555. f_eq (f_produit z (f_somme x y))
  556. (f_somme (f_produit z x) (f_produit z y)).
  557. Proof.
  558. intros.
  559. apply f_trans with (y:= f_produit (f_somme x y) z).
  560. apply produit_fractions_commutatif.
  561. apply f_trans with (f_somme (f_produit x z) (f_produit y z)).
  562. apply fractions_distributivite_droite.
  563. assumption.
  564. assumption.
  565. assumption.
  566. destruct x as (a,b).
  567. destruct y as (c,d).
  568. destruct z as (e,f).
  569. simpl in H; simpl in H0; simpl in H1.
  570. apply compatibility_f_eq_operations.
  571. simpl.
  572. apply nat_regulier.
  573. assumption.
  574. assumption.
  575. simpl.
  576. apply nat_regulier.
  577. assumption.
  578. assumption.
  579. simpl.
  580. apply nat_regulier.
  581. assumption.
  582. assumption.
  583. simpl.
  584. apply nat_regulier.
  585. assumption.
  586. assumption.
  587. apply produit_fractions_commutatif.
  588. apply produit_fractions_commutatif.
  589. Qed.
  590.  
  591. End propriétés_arithmétiques_des_fractions.
  592.  
  593. Section Bonus_l'égalité_est_décidable.
  594.  
  595. Fixpoint nat_eq_dec (m n:nat) {struct m}:sumbool (m = n)(m <> n).
  596. Proof.
  597. destruct m.
  598. destruct n.
  599. left.
  600. reflexivity.
  601. right.
  602. discriminate.
  603. destruct n.
  604. right.
  605. discriminate.
  606. destruct nat_eq_dec with (m:=m) (n:=n).
  607. left.
  608. apply eq_S.
  609. assumption.
  610. right.
  611. intro.
  612. apply n0.
  613. apply eq_add_S.
  614. assumption.
  615. Defined.
  616.  
  617. Lemma caracterisation_eq_den_nul: forall x y:Fraction,
  618. f_eq x y -> (denominateur x = 0 -> denominateur y = 0 -> numerateur x = numerateur y).
  619. Proof.
  620. assert (let aux :=
  621. fun x y:Fraction =>
  622. (denominateur x = 0 -> denominateur y = 0 -> numerateur x = numerateur y)
  623. in
  624. forall p q:Fraction, f_eq p q -> aux p q) as L.
  625. apply f_eq_ind.
  626. intros; reflexivity.
  627. intros.
  628. apply eq_sym.
  629. apply H0.
  630. assumption.
  631. assumption.
  632. intros.
  633. assert (denominateur y = 0 \/ denominateur y <> 0).
  634. destruct (denominateur y).
  635. left.
  636. reflexivity.
  637. right.
  638. discriminate.
  639. destruct H5.
  640. rewrite H0.
  641. apply H2.
  642. assumption.
  643. assumption.
  644. assumption.
  645. assumption.
  646. absurd (denominateur z = 0).
  647. apply consistance_den_non_nul with (x:=y).
  648. assumption.
  649. assumption.
  650. assumption.
  651. intros.
  652. simpl.
  653. simpl in H1.
  654. apply False_ind.
  655. apply H.
  656. apply H1.
  657. simpl in L.
  658. apply L.
  659. Qed.
  660.  
  661. Definition f_eq_dec: forall x y:Fraction,
  662. sumbool (f_eq x y) (~f_eq x y).
  663. Proof.
  664. intros x y.
  665. destruct x as (a,b).
  666. destruct y as (c,d).
  667. destruct b.
  668. destruct d.
  669. destruct nat_eq_dec with (m:=a) (n:=c).
  670. rewrite e.
  671. left.
  672. apply f_refl.
  673. right.
  674. intro.
  675. apply caracterisation_eq_den_nul in H.
  676. simpl in H.
  677. apply n.
  678. apply H.
  679. simpl.
  680. reflexivity.
  681. simpl.
  682. reflexivity.
  683. right.
  684. intro.
  685. absurd (denominateur (frac a 0) = 0).
  686. apply consistance_den_non_nul with (x:= frac c (S d)).
  687. apply f_sym.
  688. assumption.
  689. simpl.
  690. discriminate.
  691. simpl.
  692. reflexivity.
  693. destruct d.
  694. right.
  695. intro.
  696. absurd (denominateur (frac c 0) = 0).
  697. apply consistance_den_non_nul with (x:= frac a (S b)).
  698. assumption.
  699. simpl.
  700. discriminate.
  701. simpl.
  702. reflexivity.
  703. destruct (nat_eq_dec (a * S d) (S b * c)).
  704. left.
  705. apply caracterisation_de_l_egalite.
  706. discriminate.
  707. discriminate.
  708. apply e.
  709. right.
  710. intro.
  711. apply n.
  712. apply caracterisation_de_l_egalite.
  713. discriminate.
  714. discriminate.
  715. assumption.
  716. Defined.
  717.  
  718. End Bonus_l'égalité_est_décidable.
  719.  
  720. End fractions_entiers_naturels.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement