@ FII

Laborator 3

Exerciții propuse:

  1. (0.5 puncte) Definiți o un tip de date polimorfic pentru arbori binari.

  2. (0.5 puncte) Definiți o funcție mirror care oglindește un arbore binar (al cărui tip a fost definit la exercițiul precendent).

  3. (1 punct) Demonstrați că funcția mirror este convolutivă (eng. convolutive), adică mirror (mirror t) = t pentru orice arbore binar t.

  4. (0.5 puncte) Scrieți o funcție de nivel superior denumită process care primește o funcție de tip f : T -> T și un arbore binar parametric în tipul T și aplică funcția f fiecărui nod din arbore. Testați funcția process utilizând funcții anonime trimise ca parametru.

  5. Demonstrați următoarele teoreme (0.25 puncte pentru fiecare, cu excepția mt care valorează 0.5 puncte):

Theorem and_elim_1:
  forall (A B : Prop), A /\ B -> A.
Admitted.
Theorem and_elim_2:
  forall (A B : Prop), A /\ B -> B.
Admitted.
Theorem and_intro:
  forall (A B : Prop), A -> B -> (A /\ B).
Admitted.
Theorem or_elim:
  forall (A B C: Prop), (A -> C) -> (B -> C) -> (A \/ B) -> C.
Proof.
Admitted.
Theorem or_intro_1:
  forall (A B : Prop), A -> (A \/ B).
Proof.
Admitted.
Theorem or_intro_2:
  forall (A B : Prop), B -> (A \/ B).
Proof.
Admitted.
Theorem not_not:
  forall (P : Prop), P -> ~~P.
Proof.
Admitted.
Theorem mp :
  forall A B,
    (A -> B) -> A -> B.
Proof.
Admitted.
Theorem mt :
  forall (A B : Prop),
    (A -> B) -> ~ B -> ~ A.
Proof.

Coq Reference Manual: https://coq.inria.fr/distrib/current/refman/