Logică și structuri discrete - Tema 1

Rezolvați cel puțin 3 din următoarele 4 exerciții

Exercițiul 1: Rotunjirea numerelor
Ocaml dispune de funcția standard truncate : float -> int (nume echivalent: int_of_float) care trunchiază partea zecimală a unui număr real.
Există de asemenea funcția de conversie float_of_int (echivalent mai scurt: float) care convertește un întreg la real (utilă pentru a face aritmetică între întregi și reali).
a) Scrieți o funcție round : float -> int care rotunjește un real la cel mai apropiat întreg.
Dacă partea zecimală e 0.5, rotunjiți numărul în direcția opusă lui zero: round (-. 0.5) = -1, round 1.5 = 2.
Atenție, funcția trebuie să funcționeze corect pentru numere pozitive și negative.
Operatorii pentru numere reale se scriu cu punct: +. -. *. /. (ca și constantele reale).
(opțional) b) Scrieți o funcție care rotunjește un număr real la două zecimale, folosind definiția de mai sus.

Exercițiul 2
Câte funcții de pe o mulțime cu 3 elemente pe o mulțime cu 3 elemente nu sunt injective ? Argumentați cât mai simplu răspunsul.

Exercițiul 3
a) Compunerea a două funcții injective e injectivă? Demonstrați.
b) Invers, dacă f ⚪ g e injectivă, rezultă că f și g sunt injective? Demonstrați sau dați un contraexemplu.
Indicație: E util să faceți o figură cu compunerea (v. curs p.27). Pot exista puncte neacoperite în codomeniul uneia din funcții? Cum pot influența ele răspunsul?

Exercițiul 4: Compunerea funcțiilor
La curs, am definit

  let comp f g x = f (g x)      (* compunerea functiilor *)
  let appl2 f = comp f f	(* f compusă cu ea însăși *)
sau în notație matematică: appl2 f = f ⚪ f
Putem arăta, expandând definiția, că appl2 appl2 reprezintă compunerea de 4 ori (am subliniat termenul înlocuit conform definiției la fiecare pas de transformare):
appl2 appl2 f
= comp appl2 appl2 f
= appl2 (appl2 f)
= appl2 (f ⚪ f)
= (f ⚪ f) ⚪ (f ⚪ f)
= f ⚪ f ⚪ f ⚪ f

Considerați următoarele definiții:

let appl3 f = comp f (appl2 f)
let appl23c f = comp appl2 appl3 f
let appl32c f = comp appl3 appl2 f
Explicați, expandând definițiile (pe hârtie) ce reprezintă fiecare din funcțiile definite.
Verificați pe calculator rezultatul, aplicând fiecare din ele funcției f(x)=2*x+1 în punctul x=0.
Marius Minea
Last modified: Mon Sep 25 11:15:00 EEST 2017