Tutorial di Meccanizzazione della Matematicamaggesi/tpcoq/verifica.pdf · 2015. 8. 21. · Tutorial...

33
Tutorial di Meccanizzazione della Matematica Marco Maggesi DiMaI – Dipartimento di Matematica e Informatica“U. Dini” Agosto 2015

Transcript of Tutorial di Meccanizzazione della Matematicamaggesi/tpcoq/verifica.pdf · 2015. 8. 21. · Tutorial...

Page 1: Tutorial di Meccanizzazione della Matematicamaggesi/tpcoq/verifica.pdf · 2015. 8. 21. · Tutorial di Meccanizzazione della Matematica Marco Maggesi DiMaI { Dipartimento di Matematica

Tutorial di Meccanizzazione della Matematica

Marco Maggesi

DiMaI – Dipartimento di Matematica e Informatica“U. Dini”

Agosto 2015

Page 2: Tutorial di Meccanizzazione della Matematicamaggesi/tpcoq/verifica.pdf · 2015. 8. 21. · Tutorial di Meccanizzazione della Matematica Marco Maggesi DiMaI { Dipartimento di Matematica

Introduzione a Coq

Coq e

I Un sistema di dimostrazione interattivo (proof assistant).

I Un linguaggio di programmazione funzionale.

Coq e basato sul Calcolo delle Costruzioni Induttive (CIC).

Page 3: Tutorial di Meccanizzazione della Matematicamaggesi/tpcoq/verifica.pdf · 2015. 8. 21. · Tutorial di Meccanizzazione della Matematica Marco Maggesi DiMaI { Dipartimento di Matematica

Alcune notazioni

1. f x ≡ f (x)

2. f x y ≡ f (x , y)

3. f (g t) t ≡ f (g(t), t)

4. f : nat -> nat ≡ f : N −→ N

5. ~A ≡ ¬A6. A -> B ≡ A =⇒ B

7. A <-> B ≡ A ⇐⇒ B

8. A /\ B ≡ A ∧ B

9. A \/ B ≡ A ∨ B

10. forall x : A. P x ≡ ∀x ∈ A.P(x)

11. exists x : A. P x ≡ ∃x ∈ A.P(x)

Page 4: Tutorial di Meccanizzazione della Matematicamaggesi/tpcoq/verifica.pdf · 2015. 8. 21. · Tutorial di Meccanizzazione della Matematica Marco Maggesi DiMaI { Dipartimento di Matematica

Alcune notazioni

1. f x ≡ f (x)

2. f x y ≡ f (x , y)

3. f (g t) t ≡ f (g(t), t)

4. f : nat -> nat ≡ f : N −→ N5. ~A ≡ ¬A6. A -> B ≡ A =⇒ B

7. A <-> B ≡ A ⇐⇒ B

8. A /\ B ≡ A ∧ B

9. A \/ B ≡ A ∨ B

10. forall x : A. P x ≡ ∀x ∈ A.P(x)

11. exists x : A. P x ≡ ∃x ∈ A.P(x)

Page 5: Tutorial di Meccanizzazione della Matematicamaggesi/tpcoq/verifica.pdf · 2015. 8. 21. · Tutorial di Meccanizzazione della Matematica Marco Maggesi DiMaI { Dipartimento di Matematica

Alcune notazioni

1. f x ≡ f (x)

2. f x y ≡ f (x , y)

3. f (g t) t ≡ f (g(t), t)

4. f : nat -> nat ≡ f : N −→ N5. ~A ≡ ¬A6. A -> B ≡ A =⇒ B

7. A <-> B ≡ A ⇐⇒ B

8. A /\ B ≡ A ∧ B

9. A \/ B ≡ A ∨ B

10. forall x : A. P x ≡ ∀x ∈ A.P(x)

11. exists x : A. P x ≡ ∃x ∈ A.P(x)

Page 6: Tutorial di Meccanizzazione della Matematicamaggesi/tpcoq/verifica.pdf · 2015. 8. 21. · Tutorial di Meccanizzazione della Matematica Marco Maggesi DiMaI { Dipartimento di Matematica

I tipi di Coq

In Coq ogni termine ha un tipo univocamente individuato.

Check 0.

0 : nat

Check nat.

nat : Set

Check 2+2=4.

2 + 2 = 4 : Prop

Check True.

True : Prop

Check Prop.

Prop : Type

Page 7: Tutorial di Meccanizzazione della Matematicamaggesi/tpcoq/verifica.pdf · 2015. 8. 21. · Tutorial di Meccanizzazione della Matematica Marco Maggesi DiMaI { Dipartimento di Matematica

I tipi di Coq

In Coq ogni termine ha un tipo univocamente individuato.

Check 0.

0 : nat

Check nat.

nat : Set

Check 2+2=4.

2 + 2 = 4 : Prop

Check True.

True : Prop

Check Prop.

Prop : Type

Page 8: Tutorial di Meccanizzazione della Matematicamaggesi/tpcoq/verifica.pdf · 2015. 8. 21. · Tutorial di Meccanizzazione della Matematica Marco Maggesi DiMaI { Dipartimento di Matematica

I tipi di Coq

In Coq ogni termine ha un tipo univocamente individuato.

Check 0.

0 : nat

Check nat.

nat : Set

Check 2+2=4.

2 + 2 = 4 : Prop

Check True.

True : Prop

Check Prop.

Prop : Type

Page 9: Tutorial di Meccanizzazione della Matematicamaggesi/tpcoq/verifica.pdf · 2015. 8. 21. · Tutorial di Meccanizzazione della Matematica Marco Maggesi DiMaI { Dipartimento di Matematica

I tipi di Coq

In Coq ogni termine ha un tipo univocamente individuato.

Check 0.

0 : nat

Check nat.

nat : Set

Check 2+2=4.

2 + 2 = 4 : Prop

Check True.

True : Prop

Check Prop.

Prop : Type

Page 10: Tutorial di Meccanizzazione della Matematicamaggesi/tpcoq/verifica.pdf · 2015. 8. 21. · Tutorial di Meccanizzazione della Matematica Marco Maggesi DiMaI { Dipartimento di Matematica

Dichiarazioni

Section Dichiarazioni.

Variable n : nat.

n is assumed

Hypothesis Pos_n : (gt n 0).

Pos_n is assumed

Check gt.

gt : nat -> nat -> Prop

Check (gt n 0).

n > 0 : Prop

Page 11: Tutorial di Meccanizzazione della Matematicamaggesi/tpcoq/verifica.pdf · 2015. 8. 21. · Tutorial di Meccanizzazione della Matematica Marco Maggesi DiMaI { Dipartimento di Matematica

Dichiarazioni

Section Dichiarazioni.

Variable n : nat.

n is assumed

Hypothesis Pos_n : (gt n 0).

Pos_n is assumed

Check gt.

gt : nat -> nat -> Prop

Check (gt n 0).

n > 0 : Prop

Page 12: Tutorial di Meccanizzazione della Matematicamaggesi/tpcoq/verifica.pdf · 2015. 8. 21. · Tutorial di Meccanizzazione della Matematica Marco Maggesi DiMaI { Dipartimento di Matematica

Dichiarazioni

Section Dichiarazioni.

Variable n : nat.

n is assumed

Hypothesis Pos_n : (gt n 0).

Pos_n is assumed

Check gt.

gt : nat -> nat -> Prop

Check (gt n 0).

n > 0 : Prop

Page 13: Tutorial di Meccanizzazione della Matematicamaggesi/tpcoq/verifica.pdf · 2015. 8. 21. · Tutorial di Meccanizzazione della Matematica Marco Maggesi DiMaI { Dipartimento di Matematica

Defininizioni

Definition one : nat := S 0.

one is defined

Definition two : nat := S one.

two is defined

Print one.

one = 1 : nat

Definition double (m : nat) := plus m m.

double is defined

Print double.

double = fun m : nat => m + m : nat -> nat

Page 14: Tutorial di Meccanizzazione della Matematicamaggesi/tpcoq/verifica.pdf · 2015. 8. 21. · Tutorial di Meccanizzazione della Matematica Marco Maggesi DiMaI { Dipartimento di Matematica

Defininizioni

Definition one : nat := S 0.

one is defined

Definition two : nat := S one.

two is defined

Print one.

one = 1 : nat

Definition double (m : nat) := plus m m.

double is defined

Print double.

double = fun m : nat => m + m : nat -> nat

Page 15: Tutorial di Meccanizzazione della Matematicamaggesi/tpcoq/verifica.pdf · 2015. 8. 21. · Tutorial di Meccanizzazione della Matematica Marco Maggesi DiMaI { Dipartimento di Matematica

Defininizioni

Definition one : nat := S 0.

one is defined

Definition two : nat := S one.

two is defined

Print one.

one = 1 : nat

Definition double (m : nat) := plus m m.

double is defined

Print double.

double = fun m : nat => m + m : nat -> nat

Page 16: Tutorial di Meccanizzazione della Matematicamaggesi/tpcoq/verifica.pdf · 2015. 8. 21. · Tutorial di Meccanizzazione della Matematica Marco Maggesi DiMaI { Dipartimento di Matematica

Defininizioni

Definition one : nat := S 0.

one is defined

Definition two : nat := S one.

two is defined

Print one.

one = 1 : nat

Definition double (m : nat) := plus m m.

double is defined

Print double.

double = fun m : nat => m + m : nat -> nat

Page 17: Tutorial di Meccanizzazione della Matematicamaggesi/tpcoq/verifica.pdf · 2015. 8. 21. · Tutorial di Meccanizzazione della Matematica Marco Maggesi DiMaI { Dipartimento di Matematica

Logica proposizionale

Section Esempi_logica.

Variable A B C : Prop.

A is assumed.

B is assumed.

C is assumed.

Check (A -> B)

A -> B : Prop

Lemma es1: (A -> B -> C) -> (A -> B) -> (A -> C).

1 subgoal

A : Prop

B : Prop

C : Prop

============================

(A -> B -> C) -> (A -> B) -> A -> C

Page 18: Tutorial di Meccanizzazione della Matematicamaggesi/tpcoq/verifica.pdf · 2015. 8. 21. · Tutorial di Meccanizzazione della Matematica Marco Maggesi DiMaI { Dipartimento di Matematica

Logica proposizionale

Section Esempi_logica.

Variable A B C : Prop.

A is assumed.

B is assumed.

C is assumed.

Check (A -> B)

A -> B : Prop

Lemma es1: (A -> B -> C) -> (A -> B) -> (A -> C).

1 subgoal

A : Prop

B : Prop

C : Prop

============================

(A -> B -> C) -> (A -> B) -> A -> C

Page 19: Tutorial di Meccanizzazione della Matematicamaggesi/tpcoq/verifica.pdf · 2015. 8. 21. · Tutorial di Meccanizzazione della Matematica Marco Maggesi DiMaI { Dipartimento di Matematica

Logica proposizionale

Section Esempi_logica.

Variable A B C : Prop.

A is assumed.

B is assumed.

C is assumed.

Check (A -> B)

A -> B : Prop

Lemma es1: (A -> B -> C) -> (A -> B) -> (A -> C).

1 subgoal

A : Prop

B : Prop

C : Prop

============================

(A -> B -> C) -> (A -> B) -> A -> C

Page 20: Tutorial di Meccanizzazione della Matematicamaggesi/tpcoq/verifica.pdf · 2015. 8. 21. · Tutorial di Meccanizzazione della Matematica Marco Maggesi DiMaI { Dipartimento di Matematica

Logica proposizionale (continua)

intros H H’ HA.

1 subgoal

A : Prop

B : Prop

C : Prop

H : A -> B -> C

H’ : A -> B

HA : A

============================

C

Page 21: Tutorial di Meccanizzazione della Matematicamaggesi/tpcoq/verifica.pdf · 2015. 8. 21. · Tutorial di Meccanizzazione della Matematica Marco Maggesi DiMaI { Dipartimento di Matematica

Logica proposizionale (continua)

apply H.

2 subgoals

A : Prop

B : Prop

C : Prop

H : A -> B -> C

H’ : A -> B

HA : A

============================

A

subgoal 2 is:

B

Page 22: Tutorial di Meccanizzazione della Matematicamaggesi/tpcoq/verifica.pdf · 2015. 8. 21. · Tutorial di Meccanizzazione della Matematica Marco Maggesi DiMaI { Dipartimento di Matematica

Logica proposizionale (continua)

apply HA.

1 subgoal

A : Prop

B : Prop

C : Prop

H : A -> B -> C

H’ : A -> B

HA : A

============================

B

Page 23: Tutorial di Meccanizzazione della Matematicamaggesi/tpcoq/verifica.pdf · 2015. 8. 21. · Tutorial di Meccanizzazione della Matematica Marco Maggesi DiMaI { Dipartimento di Matematica

Logica proposizionale (continua)

apply H’.

1 subgoal

A : Prop

B : Prop

C : Prop

H : A -> B -> C

H’ : A -> B

HA : A

============================

A

Page 24: Tutorial di Meccanizzazione della Matematicamaggesi/tpcoq/verifica.pdf · 2015. 8. 21. · Tutorial di Meccanizzazione della Matematica Marco Maggesi DiMaI { Dipartimento di Matematica

Logica proposizionale (continua)

apply HA.

Proof completed.

Qed.

es1 is defined

Check es1.

es1

: (A -> B -> C) -> (A -> B) -> A -> C

Page 25: Tutorial di Meccanizzazione della Matematicamaggesi/tpcoq/verifica.pdf · 2015. 8. 21. · Tutorial di Meccanizzazione della Matematica Marco Maggesi DiMaI { Dipartimento di Matematica

Logica proposizionale (continua)

apply HA.

Proof completed.

Qed.

es1 is defined

Check es1.

es1

: (A -> B -> C) -> (A -> B) -> A -> C

Page 26: Tutorial di Meccanizzazione della Matematicamaggesi/tpcoq/verifica.pdf · 2015. 8. 21. · Tutorial di Meccanizzazione della Matematica Marco Maggesi DiMaI { Dipartimento di Matematica

Logica proposizionale (continua)

apply HA.

Proof completed.

Qed.

es1 is defined

Check es1.

es1

: (A -> B -> C) -> (A -> B) -> A -> C

Page 27: Tutorial di Meccanizzazione della Matematicamaggesi/tpcoq/verifica.pdf · 2015. 8. 21. · Tutorial di Meccanizzazione della Matematica Marco Maggesi DiMaI { Dipartimento di Matematica

Logica proposizionale (continua)

1 subgoal

A : Prop

B : Prop

C : Prop

============================

(A -> B -> C) -> (A -> B) -> A -> C

auto.

Proof completed.

Qed.

es1_bis is defined

Page 28: Tutorial di Meccanizzazione della Matematicamaggesi/tpcoq/verifica.pdf · 2015. 8. 21. · Tutorial di Meccanizzazione della Matematica Marco Maggesi DiMaI { Dipartimento di Matematica

Logica proposizionale (continua)

1 subgoal

A : Prop

B : Prop

C : Prop

============================

(A -> B -> C) -> (A -> B) -> A -> C

auto.

Proof completed.

Qed.

es1_bis is defined

Page 29: Tutorial di Meccanizzazione della Matematicamaggesi/tpcoq/verifica.pdf · 2015. 8. 21. · Tutorial di Meccanizzazione della Matematica Marco Maggesi DiMaI { Dipartimento di Matematica

Logica proposizionale (continua)

1 subgoal

A : Prop

B : Prop

C : Prop

============================

(A -> B -> C) -> (A -> B) -> A -> C

auto.

Proof completed.

Qed.

es1_bis is defined

Page 30: Tutorial di Meccanizzazione della Matematicamaggesi/tpcoq/verifica.pdf · 2015. 8. 21. · Tutorial di Meccanizzazione della Matematica Marco Maggesi DiMaI { Dipartimento di Matematica

Alcune tattiche di Coq (calcolo proposizionale)

1. apply thm: applica thm.

2. intro H: introduce una ipotesi chiamandola H.

3. intros: introduce tutte le ipotesi.

4. unfold nome: sostituisce la costante nome con la suadefinizione.

5. left / right: distrugge la tesi della forma A ∨ B.

6. split: distrugge la tesi della forma A ∧ B, A ⇐⇒ B.

Page 31: Tutorial di Meccanizzazione della Matematicamaggesi/tpcoq/verifica.pdf · 2015. 8. 21. · Tutorial di Meccanizzazione della Matematica Marco Maggesi DiMaI { Dipartimento di Matematica

Alcune tattiche di Coq (uguaglianza)

1. reflexivity: dimostra x = x .

2. symmetry: riduce x = y a y = x .

3. transitivity x : riduce a = b a a = x e x = b.

4. rewrite thm: riscrive l’equazione thm.

Page 32: Tutorial di Meccanizzazione della Matematicamaggesi/tpcoq/verifica.pdf · 2015. 8. 21. · Tutorial di Meccanizzazione della Matematica Marco Maggesi DiMaI { Dipartimento di Matematica

Alcune tattiche di Coq (dimostrazione automatica)

1. auto: usa fatti gia noti.

2. tauto: dimostra una tautologia.

3. intuition: auto + tauto.

4. firstorder: dimostra una semplice proposizione del primoordine.

Page 33: Tutorial di Meccanizzazione della Matematicamaggesi/tpcoq/verifica.pdf · 2015. 8. 21. · Tutorial di Meccanizzazione della Matematica Marco Maggesi DiMaI { Dipartimento di Matematica

Per iniziare

Collegatevi alla pagina

http://www.math.unifi.it/users/maggesi/tpcoq2015/

I file di lavoro sono quelli con estensione .v .Scaricateli sul vostro computer ed aprirteli con Coq.