import Lectures.LoVe.LoVelib
/-!
Exercícios da Aula 5: Provas Progressivas.
Dê uma prova estruturada de cada enunciado, substituindo `sorry`.
A importação fornece `fix` e `assume` e os lemas aritméticos.
Os exercícios 1 a 6 usam `fix`, `assume`, `have` e `show` apenas.
Os exercícios 7 e 8 usam `calc`. Os exercícios 9 e 10 são opcionais.
-/
namespace Forward

theorem S (a b c : Prop) :
    (a → b → c) → (a → b) → a → c :=
  sorry

end Forward

namespace Forward

theorem curry_iff (a b c : Prop) :
    (a ∧ b → c) ↔ (a → b → c) :=
  sorry

end Forward

namespace Forward

theorem iff_symm (a b : Prop) :
    (a ↔ b) → (b ↔ a) :=
  sorry

end Forward

namespace Forward

theorem non_contradiction (a : Prop) :
    ¬ (a ∧ ¬ a) :=
  sorry

end Forward

namespace Forward

theorem or_imp (a b c : Prop) :
    (a ∨ b → c) ↔ (a → c) ∧ (b → c) :=
  sorry

end Forward

namespace Forward

theorem forall_eq_three (P : ℕ → Prop) :
    (∀ x, x = 3 → P x) ↔ P 3 :=
  sorry

end Forward

namespace Forward

theorem two_distrib (a b : ℕ) :
    2 * (a + b) = a + a + (b + b) :=
  sorry

end Forward

namespace Forward

theorem calc_chain (a b c : ℕ) :
    (a + b) * c = a * c + b * c :=
  sorry

end Forward

namespace Forward

theorem exists_eq_three (P : ℕ → Prop) :
    (∃ x, x = 3 ∧ P x) ↔ P 3 :=
  sorry

end Forward

namespace Forward

theorem curry_three (a b c d : Prop) :
    (a ∧ b ∧ c → d) ↔ (a → b → c → d) :=
  sorry

end Forward

