Coq seminár.

Relevantná kapitola v knihe Logical Foundations.

Osnova

  • Kompilovanie a import
  • Indukcia
  • Dôkazy v dôkazoch
  • Formal vs. Informal proofs
  • Nat na Bin a späť

Doterajšie taktiky

Taktiky, ktoré sme videli v Basics.v a Induction.v.


n - mená
e - výrazy vo funkcionálnom jazyku
c - taCtics 
t - typ

simpl
reflexivity
rewrite { ->, <- or nothing } c1

intro n1
intros n1 n2 n3 ... nk

destruct n as [ n1 | n2 | n3 | ... | nk ] (** creates k goals **)
induction n as [ n1 IHc1 | n2 IHc2 | n3 IHc3 | ... | nk IHck ] (**creates k goals **)

admit

assert ( n : t ) (** creates o new goal **)
replace e1 with e2 (** creates two goals **)

Ďalšie taktiky, ktoré sa môžu hodiť

exact e1
assumption 

try 
do n c 

Pre ešte viac taktík, pozri tu.

Commands

Môže sa hodiť Search, ktorý umožňuje relatívne šikovne hladať tvrdenia v kontexte.

Riešenie k nat_to_bin a bin_to_nat z Basics.v.

Syntax

Inductive nat : Type :=
  | O
  | S (n : nat).

Definition is_zero (n : nat) : bool := 
  match n with 
  | O => true
  | S n' => false 
  end.

Fixpoint plus (n : nat) (m : nat) : nat :=
  match n with
  | O => m
  | S n' => S (plus n' m)
  end.

Notation "x + y" := (plus x y) (at level 50, left associativity) : nat_scope.

(** Theorem, Lemma, Fact, Example **)
Theorem add_0_l : forall n:nat, O + n = n.
Proof.
  intros n.
  simpl. 
  reflexivity.
Qed.
(** Prípadne Admitted. alebo Abort. **)