Guest User

Untitled

a guest
Jun 16th, 2018
227
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
OCaml 1.45 KB | None | 0 0
  1. Lemma times_is_distributive : forall n1 n2 n3 : natural,
  2.   times n1 (plus n2 n3) = plus (times n1 n2) (times n1 n3).
  3. Proof.
  4.   intros n1 n2 n3.
  5.   induction n1.
  6.  
  7.   Case "n1 = zero".
  8.   simpl times.
  9.   reflexivity.
  10.  
  11.   Case "n1 = succ n1'".
  12.   rewrite times_is_commutative.
  13.   rewrite reverse_times.
  14.   rewrite times_is_commutative.
  15.   rewrite IHn1.
  16.   simpl times.
  17.   assert (H1: (plus (times n1 n2) n2) = (plus n2 (times n1 n2))).
  18.   rewrite plus_is_commutative.
  19.   reflexivity.
  20.   assert (H2: (plus (times n1 n3) n3) = (plus n3 (times n1 n3))). rewrite plus_is_commutative. reflexivity.
  21.   rewrite H1. rewrite H2.
  22.   assert (H3: (plus (plus n2 (times n1 n2)) (plus n3 (times n1 n3)))
  23.     = (plus n2 (plus (times n1 n2) (plus n3 (times n1 n3))))). rewrite plus_is_associative. reflexivity.
  24.   assert (H4: (plus (times n1 n2) (plus n3 (times n1 n3)))
  25.     = (plus (plus (times n1 n2) n3) (times n1 n3))). rewrite plus_is_associative. reflexivity.
  26.   rewrite H3. rewrite H4.
  27.   assert (H5: (plus (times n1 n2) n3) = (plus n3 (times n1 n2))). rewrite plus_is_commutative. reflexivity.
  28.   rewrite H5.
  29.   assert (H6: (plus (plus n3 (times n1 n2)) (times n1 n3)) = plus n3 (plus (times n1 n2) (times n1 n3))).
  30.   rewrite plus_is_associative. reflexivity.
  31.   rewrite H6.
  32.   assert (H7: (plus n2 (plus n3 (plus (times n1 n2) (times n1 n3)))) = (plus (plus n2 n3) (plus (times n1 n2) (times n1 n3)))). rewrite plus_is_associative. reflexivity.
  33.   rewrite H7.
  34.   reflexivity.
  35. Qed.
Add Comment
Please, Sign In to add comment