Advertisement
Guest User

(a + b)^2 = a^2 + 2 * a * b + b ^2 proof

a guest
Feb 18th, 2020
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.07 KB | None | 0 0
  1. Lemma sameFunc : forall a b : nat, forall f : (nat->nat), a = b -> (f a) = (f b).
  2. Proof.
  3. intros.
  4. subst.
  5. trivial.
  6. Qed.
  7.  
  8.  
  9. Lemma eqOrder : forall a b : nat, a = b -> b = a.
  10. Proof.
  11. intros.
  12. subst.
  13. reflexivity.
  14. Qed.
  15.  
  16. Lemma eqStep : forall n : nat, (n + 1) = (S n).
  17. Proof.
  18. intros.
  19. elim n.
  20. simpl.
  21. reflexivity.
  22. intros.
  23. simpl.
  24. remember (n0 + 1) as a.
  25. remember (S n0) as b.
  26. apply sameFunc.
  27. apply H.
  28. Qed.
  29.  
  30. Lemma nextGreaterS : forall n : nat, (S n) > n.
  31. Proof.
  32. unfold gt.
  33. unfold lt.
  34. intros.
  35. remember (S n) as k.
  36. apply le_n.
  37. Qed.
  38.  
  39. Lemma nextGreaterPlus: forall n : nat, (n + 1) > n.
  40. Proof.
  41. intros.
  42. replace (n + 1) with (S n).
  43. apply nextGreaterS.
  44. remember (S n) as a.
  45. remember (n + 1) as b.
  46. apply eqOrder.
  47. replace a with (S n).
  48. replace b with (n + 1).
  49. apply eqStep.
  50. Qed.
  51.  
  52. Lemma addZeroAfter : forall a : nat, a + 0 = a.
  53. Proof.
  54. intros.
  55. elim a.
  56. Focus 1.
  57. simpl.
  58. reflexivity.
  59. simpl.
  60. intros.
  61. remember (n + 0) as k.
  62. replace k with n.
  63. apply sameFunc.
  64. reflexivity.
  65. Qed.
  66.  
  67. Lemma addZeroBefore : forall a : nat, 0 + a = a.
  68. Proof.
  69. intros.
  70. unfold Nat.add.
  71. reflexivity.
  72. Qed.
  73.  
  74. Lemma addOneToAnother : forall a b : nat, (S a) + b = a + (S b).
  75. Proof.
  76. intros.
  77. elim a.
  78. remember (S b) as k.
  79. Focus 1.
  80. replace (0 + k) with (k + 0).
  81. Focus 2.
  82. replace (k + 0) with k.
  83. Focus 2.
  84. apply eqOrder.
  85. apply addZeroAfter.
  86. apply addZeroBefore.
  87. replace (k + 0) with k.
  88. Focus 2.
  89. apply eqOrder.
  90. apply addZeroAfter.
  91. replace k with (S b).
  92. replace (1 + b) with (b + 1).
  93. Focus 2.
  94. simpl.
  95. apply eqStep.
  96. remember b as n.
  97. apply eqStep.
  98. simpl.
  99. intros.
  100. apply sameFunc.
  101. apply H.
  102. Qed.
  103.  
  104. Lemma addComm : forall a b : nat, a + b = b + a.
  105. Proof.
  106. intros.
  107. elim a.
  108. simpl.
  109. Focus 1.
  110. apply eqOrder.
  111. apply addZeroAfter.
  112. intros.
  113. replace (b + (S n)) with ((S b) + n).
  114. Focus 2.
  115. apply addOneToAnother.
  116. simpl.
  117. apply sameFunc.
  118. apply H.
  119. Qed.
  120.  
  121. Lemma mulNext : forall m n, (m + 1) * n = m * n + n.
  122. Proof.
  123. intros.
  124. replace (m + 1) with (S m).
  125. Focus 2.
  126. apply eqOrder.
  127. apply eqStep.
  128. unfold Nat.mul.
  129. simpl.
  130. fold Nat.mul.
  131. remember (m * n) as a.
  132. apply addComm.
  133. Qed.
  134.  
  135. Lemma mulByZero : forall n, n * 0 = 0.
  136. Proof.
  137. intros.
  138. elim n.
  139. simpl.
  140. reflexivity.
  141. intros.
  142. replace (S n0) with (n0 + 1).
  143. Focus 2.
  144. apply eqStep.
  145. replace ((n0 + 1) * 0) with (n0 * 0 + 0).
  146. Focus 2.
  147. apply eqOrder.
  148. apply mulNext.
  149. replace (n0 * 0) with 0.
  150. simpl.
  151. reflexivity.
  152. Qed.
  153.  
  154.  
  155. Lemma mulByOne : forall n, n * 1 = n.
  156. Proof.
  157. intros.
  158. elim n.
  159. simpl.
  160. reflexivity.
  161. intros.
  162. replace (n0 * 1) with n0.
  163. simpl.
  164. apply sameFunc.
  165. apply H.
  166. Qed.
  167.  
  168. Lemma addNotDependsOnOrder: forall a b c, (a + b) + c = a + (b + c).
  169. Proof.
  170. intros.
  171. elim a.
  172. simpl.
  173. reflexivity.
  174. simpl.
  175. intros.
  176. apply sameFunc.
  177. apply H.
  178. Qed.
  179.  
  180. Lemma mulAssoc: forall a b c, (a + b) * c = a * c + b * c.
  181. Proof.
  182. intros.
  183. elim a.
  184. simpl.
  185. reflexivity.
  186. simpl.
  187. intros.
  188. remember ((n + b) * c) as A.
  189. remember (n * c) as t1.
  190. remember (b * c) as t2.
  191. replace A with (t1 + t2).
  192. apply eqOrder.
  193. apply addNotDependsOnOrder.
  194. Qed.
  195.  
  196. Lemma mulByZeroFromDifferentSide : forall a : nat, 0 * a = 0.
  197. Proof.
  198. intros.
  199. simpl.
  200. reflexivity.
  201. Qed.
  202.  
  203. Require Import ZArith.
  204.  
  205. Lemma mulNextFromDifferentSide : forall a b, a * (b + 1) = a * b + a.
  206. Proof.
  207. intros.
  208. elim a.
  209. replace (0 * (b + 1)) with 0.
  210. replace (0 * b) with 0.
  211. simpl.
  212. reflexivity.
  213. apply eqOrder.
  214. apply mulByZeroFromDifferentSide.
  215. apply eqOrder.
  216. apply mulByZeroFromDifferentSide.
  217. intros.
  218. replace (S n) with (n + 1).
  219. replace ((n + 1) * (b + 1)) with ((n * (b + 1)) + (b + 1)).
  220. Focus 1.
  221. replace (n * (b + 1)) with (n * b + n).
  222. remember (n * b + n) as A.
  223. replace (A + (b + 1)) with (A + b + 1).
  224. replace ((n + 1) * b) with (n * b + b).
  225. replace A with (n * b + n).
  226. remember (n * b + b) as B.
  227. replace (B + (n + 1)) with (B + n + 1).
  228. replace B with (n * b + b).
  229. replace (n * b + n + b) with (n * b + b + n).
  230. reflexivity.
  231. remember (n * b) as C.
  232. replace (C + b + n) with (C + (b + n)).
  233. replace (b + n) with (n + b).
  234. replace (C + (n + b)) with (C + n + b).
  235. reflexivity.
  236. apply addNotDependsOnOrder.
  237. apply addComm.
  238. apply eqOrder.
  239. apply addNotDependsOnOrder.
  240. apply addNotDependsOnOrder.
  241. apply eqOrder.
  242. apply mulNext.
  243. apply addNotDependsOnOrder.
  244. apply eqOrder.
  245. apply mulNext.
  246. apply eqStep.
  247. Qed.
  248.  
  249. Lemma mulComm : forall a b, a * b = b * a.
  250. Proof.
  251. intros.
  252. elim a.
  253. replace (0 * b) with 0.
  254. replace (b * 0) with 0.
  255. reflexivity.
  256. apply eqOrder.
  257. apply mulByZero.
  258. apply eqOrder.
  259. apply mulByZeroFromDifferentSide.
  260. intros.
  261. replace (S n) with (n + 1).
  262. replace ((n + 1) * b) with (n * b + b).
  263. replace (b * (n + 1)) with (b * n + b).
  264. replace (n * b) with (b * n).
  265. reflexivity.
  266. apply eqOrder.
  267. apply mulNextFromDifferentSide.
  268. apply eqOrder.
  269. apply mulNext.
  270. apply eqStep.
  271. Qed.
  272.  
  273.  
  274. Lemma mulNotDependsOnOrder : forall a b c : nat, a * b * c = a * (b * c).
  275. Proof.
  276. intros.
  277. elim c.
  278. replace (b * 0) with 0.
  279. replace (a * 0) with 0.
  280. replace ((a * b) * 0) with 0.
  281. reflexivity.
  282. apply eqOrder.
  283. apply mulByZero.
  284. apply eqOrder.
  285. apply mulByZero.
  286. apply eqOrder.
  287. apply mulByZero.
  288. intros.
  289. replace (S n) with (n + 1).
  290. replace (b * (n + 1)) with (b * n + b).
  291. replace (a * (b * n + b)) with ((b * n + b) * a).
  292. replace (a * b * (n + 1)) with (a * b * n + a * b * 1).
  293. replace ((b * n + b) * a) with (b * n * a + b * a).
  294. replace (a * b * 1) with (a * b).
  295. replace (b * n * a) with (a * b * n).
  296. replace (a * b) with (b * a).
  297. reflexivity.
  298. apply mulComm.
  299. replace (a * b * n) with (a * (b * n)).
  300. apply mulComm.
  301. apply eqOrder.
  302. apply mulByOne.
  303. apply eqOrder.
  304. apply mulAssoc.
  305. apply eqOrder.
  306. replace (a * b * n) with (n * (a * b)).
  307. replace (a * b * 1) with (1 * (a * b)).
  308. replace (a * b * (n + 1)) with ((n + 1) * (a * b)).
  309. apply mulAssoc.
  310. apply mulComm.
  311. apply mulComm.
  312. apply mulComm.
  313. apply mulComm.
  314. replace (b * n) with (n * b).
  315. replace (b * (n + 1)) with ((n + 1) * b).
  316. apply eqOrder.
  317. apply mulNext.
  318. apply mulComm.
  319. apply mulComm.
  320. apply eqStep.
  321. Qed.
  322.  
  323.  
  324. Lemma squareRule : forall a b : nat, (a + b) * (a + b) = a * a + 2 * a * b + b * b.
  325. Proof.
  326. intros.
  327. replace ((a + b) * (a + b)) with (a * (a + b) + b * (a + b)).
  328. Focus 2.
  329. apply eqOrder.
  330. apply mulAssoc.
  331. replace (a * (a + b)) with ((a + b) * a).
  332. replace (b * (a + b)) with ((a + b) * b).
  333. replace ((a + b) * a) with (a * a + b * a).
  334. remember (a * a + b * a) as Q.
  335. replace ((a + b) * b) with (a * b + b * b).
  336. replace (Q + (a * b + b * b)) with (Q + a * b + b * b).
  337. replace Q with (a * a + b * a).
  338. replace (a * b) with (b * a).
  339. replace ((a * a) + (b * a) + (b * a)) with (a * a + 2 * a * b).
  340. reflexivity.
  341. replace ((a * a) + (b * a) + (b * a)) with (a * a + ((b * a) + (b * a))).
  342. replace (2 * a * b) with (b * a + b * a).
  343. reflexivity.
  344. replace (b * a) with (a * b).
  345. replace (2 * a * b) with ((1 + 1) * a * b).
  346. replace ((1 + 1) * a * b) with (1 * a * b + 1 * a * b).
  347. replace (1 * a * b) with (a * b * 1).
  348. replace (a * b * 1) with (a * b).
  349. reflexivity.
  350. apply eqOrder.
  351. apply mulByOne.
  352. replace (a * b * 1) with (a * b).
  353. replace (1 * a) with (a * 1).
  354. replace (a * 1) with a.
  355. reflexivity.
  356. apply eqOrder.
  357. apply mulByOne.
  358. apply mulComm.
  359. apply eqOrder.
  360. apply mulByOne.
  361. apply eqOrder.
  362. replace (1 * a * b) with (1 * (a * b)).
  363. replace ((1 + 1) * a * b) with ((1 + 1) * (a * b)).
  364. apply mulAssoc.
  365. apply eqOrder.
  366. apply mulNotDependsOnOrder.
  367. apply eqOrder.
  368. apply mulNotDependsOnOrder.
  369. replace (1 + 1) with 2.
  370. reflexivity.
  371. simpl.
  372. reflexivity.
  373. apply mulComm.
  374. apply eqOrder.
  375. apply addNotDependsOnOrder.
  376. apply mulComm.
  377. apply addNotDependsOnOrder.
  378. apply eqOrder.
  379. apply mulAssoc.
  380. apply eqOrder.
  381. apply mulAssoc.
  382. apply eqOrder.
  383. apply mulComm.
  384. apply mulComm.
  385. Qed.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement