Curs 2

You might also like

Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 4

Inductive Nat :=

O : Nat
| S: Nat -> Nat.
Check O.
Fixpoint plus (k m : Nat) : Nat :=
match k with
| O => m (*aici ajunge simpl*)
| S n => S (plus n m)
end.

Compute plus (S O) (S O).

(*Proof by simplification*)

Lemma plus_O_n_is_n:
forall n,plus O n =n.
Proof.

(*Tactits *)

(*Pentru orice n... cum se demonstreaza?*)

(*1. Intro ca sa introduc oricr nr natural *)


intro n.
simpl. (*functia simpl se uita in goal - ceea ce eu vr sa demonstrez, gaseste
definitia functiei plus si executa definitita cu 2 inputuri
- unul care e 0 si altul care e un n oarecare-*)
reflexivity. (*ne fol de reflexibilitatea egalitatii*)
Qed. (*check if it is correct*)

(*Proof by rewriting*)

Lemma plus_eq:
forall m n,
m=n -> plus O m = plus O n.
Proof.

(*intro m.
intro n. (*daca plec de la ce fals, orice concluzie as avea e adevarata*)
intro H. (*introfuc o noua ipoteza*)*)
(*saauuu pot sa scriu simplu: intros.*)
intros m n H. (*ASA E cel mai safe totusi*)
rewrite H. (* inlocuieste partea stanga cu dreapta. dupa ce am 2 cantitati la fel,
fac reflexivitatea*)
reflexivity.
Qed.

(*daca as vr sa fac inlocuirea invers as putea face inlocuirea invers rewrite <-
H.*)

(*Proof by case analysis*)


Lemma plus_c_a:
forall k, plus k (S O) <> O. (*Daca am un nr natural si adun succesorul lui 0 nu
poate fi niciiodata 0*)
Proof.

intro k.
destruct k as [|k']. (*intre paramteze se pot constructorii.pot da info
aditionale- situatia cand e 0 sau succ k`*)
(*Show 2. arat al doilea caz pe care l analizeaza*)
-simpl. unfold not. intro H.
inversion H.
(*Locate "<>". notatia <> este o deifnitie ce poate fi gasita cu comanda locate*)
(*unfold not da definitia negatiei. doar avand ipoteele inconsistente se poate
arata false => inversion H*)
- simpl. unfold not. intro H. inversion H. (*ca sa scap de plus aplic
simplificarea*)

Qed.

(*cand o secventa de tactici se aplica la toate goal-urile in paralel, pot scrie


asa:*)
(*Proof by case analysis*)
Lemma plus_C_A:
forall k, plus k (S O) <> O. (*Daca am un nr natural si adun succesorul lui 0 nu
poate fi niciiodata 0*)
Proof.

intro k.
destruct k as [|k']; simpl; unfold not; intro H;
inversion H.

Qed.

Lemma plus_n_O_is_n:
forall n, plus n O =n.
Proof.

induction n.
- simpl. trivial.
- simpl. rewrite IHn. trivial.
Qed.

Theorem plus_comm:
forall m n, plus m n = plus n m.
Proof.

(*daca nu stiu nimic despre m si n atunci fac inductie*)


induction m. (*primul parametru si eu vr o inductie ff puternica*)
- intro n.
simpl.
rewrite plus_n_O_is_n.
trivial.
-induction n.
+simpl. rewrite plus_n_O_is_n. trivial.
+simpl. rewrite <- IHn. simpl. rewrite IHm. simpl. rewrite IHm. reflexivity.

Qed.

Inductive List (A: Type):=


| nil: List A
| cons: A-> List A-> List A.

Arguments nil {A}.


Arguments cons {A}.

Fixpoint append (A: Type) (l1 l2 : List A): List A:=


match l1 with
|nil => l2
| cons n l1' => cons n (append A l1' l2)
end.

Definition list1:= (cons 2 (cons 3 nil)).


Arguments append {A}.

Inductive Nat :=
| O : Nat
| S : Nat -> Nat.
Fixpoint le_Nat(m n: Nat) : bool :=
match m with
| O => true
| S m' => match n with
| O =>false
| S n' => le_Nat m' n'
end
end.
Compute le_Nat O O.
Compute le_Nat (S O) O.
Compute le_Nat O (S O).

Lemma le_Trans :
forall m n p,
le_Nat m n = true ->
le_Nat n p = true ->
le_Nat m p = true.
Proof.
(* intros. *)
induction m.
-simpl. reflexivity.
-intros.
simpl in H.
destruct n.
--inversion H.
--simpl in H0.
destruct p.
--- inversion H0.
--- simpl.
apply IHm with (n := n);
assumption.

You might also like