Programowanie z typami zaleznymi i dowodzenie twierdzendaria/PTZ/Slajdy/slajdy03.pdfPredykaty...

88
Programowanie z typami zale»nymi i dowodzenie twierdze« Typowanie i typy indukcyjne 17.03.2015

Transcript of Programowanie z typami zaleznymi i dowodzenie twierdzendaria/PTZ/Slajdy/slajdy03.pdfPredykaty...

Programowanie z typami zależnymii dowodzenie twierdzeń

Typowanie i typy indukcyjne

17.03.2015

Predykaty indukcyjne Typowanie typów indukcyjnych

Logika zdaniowa

Implikacja i kwantyfikator ogólny są “wbudowane”

Goal (forall x:nat, P x → Q x) →forall x:nat, P x → R x → Q x.

intro.apply H; assumption.

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Logika zdaniowa

Implikacja i kwantyfikator ogólny są “wbudowane”

Goal (forall x:nat, P x → Q x) →forall x:nat, P x → R x → Q x.

intro.apply H; assumption.

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Logika zdaniowa

Inductive True : Prop := I : True

Inductive False : Prop :=

Print not.

not = fun A : Prop ⇒ A → False: Prop → Prop

Inductive and (A : Prop) (B : Prop) : Prop :=conj : A → B → A ∧ B

Inductive or (A : Prop) (B : Prop) : Prop :=or introl : A → A ∨ B | or intror : B → A ∨ B

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Logika zdaniowa

Inductive True : Prop := I : True

Inductive False : Prop :=

Print not.

not = fun A : Prop ⇒ A → False: Prop → Prop

Inductive and (A : Prop) (B : Prop) : Prop :=conj : A → B → A ∧ B

Inductive or (A : Prop) (B : Prop) : Prop :=or introl : A → A ∨ B | or intror : B → A ∨ B

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Logika zdaniowa

Inductive True : Prop := I : True

Inductive False : Prop :=

Print not.

not = fun A : Prop ⇒ A → False: Prop → Prop

Inductive and (A : Prop) (B : Prop) : Prop :=conj : A → B → A ∧ B

Inductive or (A : Prop) (B : Prop) : Prop :=or introl : A → A ∨ B | or intror : B → A ∨ B

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Logika zdaniowa

Inductive True : Prop := I : True

Inductive False : Prop :=

Print not.

not = fun A : Prop ⇒ A → False: Prop → Prop

Inductive and (A : Prop) (B : Prop) : Prop :=conj : A → B → A ∧ B

Inductive or (A : Prop) (B : Prop) : Prop :=or introl : A → A ∨ B | or intror : B → A ∨ B

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Logika zdaniowa

Inductive True : Prop := I : True

Inductive False : Prop :=

Print not.

not = fun A : Prop ⇒ A → False: Prop → Prop

Inductive and (A : Prop) (B : Prop) : Prop :=conj : A → B → A ∧ B

Inductive or (A : Prop) (B : Prop) : Prop :=or introl : A → A ∨ B | or intror : B → A ∨ B

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Logika zdaniowa - podstawowe dowody

Theorem obvious : True.apply I.

Qed.

Theorem obvious’ : True.constructor.

Qed.

Theorem False imp : False → 2 + 2 = 5.destruct 1.

Qed.

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Logika zdaniowa - podstawowe dowody

Theorem obvious : True.apply I.

Qed.

Theorem obvious’ : True.constructor.

Qed.

Theorem False imp : False → 2 + 2 = 5.destruct 1.

Qed.

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Logika zdaniowa - podstawowe dowody

Theorem obvious : True.apply I.

Qed.

Theorem obvious’ : True.constructor.

Qed.

Theorem False imp : False → 2 + 2 = 5.destruct 1.

Qed.

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Dowód dla and

Section Propositional.Variables P Q R : Prop.

Theorem and comm : P ∧ Q → Q ∧ P.

destruct 1.

H : PH0 : Q============================Q ∧ P

split.

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Dowód dla and

Section Propositional.Variables P Q R : Prop.

Theorem and comm : P ∧ Q → Q ∧ P.

destruct 1.

H : PH0 : Q============================Q ∧ P

split.

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

2 subgoals

H : PH0 : Q============================Q

subgoal 2 is

P

assumption.assumption.

Qed.

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Dowód dla or

Theorem or comm : P ∨ Q → Q ∨ P.

destruct 1.

2 subgoals

H : P============================Q ∨ P

subgoal 2 is

Q ∨ P

right; assumption.

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Dowód dla or

Theorem or comm : P ∨ Q → Q ∨ P.

destruct 1.

2 subgoals

H : P============================Q ∨ P

subgoal 2 is

Q ∨ P

right; assumption.

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

1 subgoal

H : Q============================Q ∨ P

left; assumption.

Qed.

End Propositional.

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Logika zdaniowa - taktyki tauto i inituition

tauto i intuition. Używając systemu sekwentów Dyckhoffa:

tauto udowadnia instancje zdaniowych tautologiiintuinicjonistycznych; rozumie spójniki logiczne, nie rozumie lematówintuition lub intuition tacdziała jak tauto, ale jak już nie ma co robić, próbuje tac lub autowith *

firstorder — eksperymentalne rozszerzenie tauto na logikępierwszego rzędu

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Logika zdaniowa - taktyki tauto i inituition

tauto i intuition. Używając systemu sekwentów Dyckhoffa:

tauto udowadnia instancje zdaniowych tautologiiintuinicjonistycznych; rozumie spójniki logiczne, nie rozumie lematówintuition lub intuition tacdziała jak tauto, ale jak już nie ma co robić, próbuje tac lub autowith *

firstorder — eksperymentalne rozszerzenie tauto na logikępierwszego rzędu

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Logika zdaniowa - taktyki tauto i inituition

tauto i intuition. Używając systemu sekwentów Dyckhoffa:

tauto udowadnia instancje zdaniowych tautologiiintuinicjonistycznych; rozumie spójniki logiczne, nie rozumie lematówintuition lub intuition tacdziała jak tauto, ale jak już nie ma co robić, próbuje tac lub autowith *

firstorder — eksperymentalne rozszerzenie tauto na logikępierwszego rzędu

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Logika zdaniowa - taktyki tauto i inituition

tauto i intuition. Używając systemu sekwentów Dyckhoffa:

tauto udowadnia instancje zdaniowych tautologiiintuinicjonistycznych; rozumie spójniki logiczne, nie rozumie lematówintuition lub intuition tacdziała jak tauto, ale jak już nie ma co robić, próbuje tac lub autowith *

firstorder — eksperymentalne rozszerzenie tauto na logikępierwszego rzędu

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Logika zdaniowa - taktyki tauto i inituition

tauto i intuition. Używając systemu sekwentów Dyckhoffa:

tauto udowadnia instancje zdaniowych tautologiiintuinicjonistycznych; rozumie spójniki logiczne, nie rozumie lematówintuition lub intuition tacdziała jak tauto, ale jak już nie ma co robić, próbuje tac lub autowith *

firstorder — eksperymentalne rozszerzenie tauto na logikępierwszego rzędu

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Logika pierwszego rzędu

Inductive ex (A : Type) (P : A → Prop) : Prop :=ex intro : ∀ x : A, P x → ex P

Theorem exist1 : ∃ x : nat, x + 1 = 2.

exists 1.

============================1 + 1 = 2

reflexivity.Qed.

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Logika pierwszego rzędu

Inductive ex (A : Type) (P : A → Prop) : Prop :=ex intro : ∀ x : A, P x → ex P

Theorem exist1 : ∃ x : nat, x + 1 = 2.

exists 1.

============================1 + 1 = 2

reflexivity.Qed.

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Równość definiowalna

Inductive eq (A : Type) (x : A) : A → Prop := eq refl : x = x

eq ind: forall (A : Type) (x : A) (P : A -> Prop),P x -> forall y : A, x = y -> P y

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Równość definiowalna

Inductive eq (A : Type) (x : A) : A → Prop := eq refl : x = x

eq ind: forall (A : Type) (x : A) (P : A -> Prop),P x -> forall y : A, x = y -> P y

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Równość definiowalna i konwersja

Theorem O plus n : ∀ n : nat, plus O n = n.intro; reflexivity.

Qed.

Theorem n plus O : ∀ n : nat, plus n O = n.induction n.

Pierwszy cel dowodowy to:plus O O = O

reflexivity.

jest prawdziwy z powodu konwersji (iota reguła). Drugi cel dowodowy to:

n : natIHn : plus n O = n============================plus (S n) O = S n

crush.Qed.

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Równość definiowalna i konwersja

Theorem O plus n : ∀ n : nat, plus O n = n.intro; reflexivity.

Qed.

Theorem n plus O : ∀ n : nat, plus n O = n.induction n.

Pierwszy cel dowodowy to:plus O O = O

reflexivity.

jest prawdziwy z powodu konwersji (iota reguła). Drugi cel dowodowy to:

n : natIHn : plus n O = n============================plus (S n) O = S n

crush.Qed.

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Równość definiowalna i konwersja

Theorem O plus n : ∀ n : nat, plus O n = n.intro; reflexivity.

Qed.

Theorem n plus O : ∀ n : nat, plus n O = n.induction n.

Pierwszy cel dowodowy to:plus O O = O

reflexivity.

jest prawdziwy z powodu konwersji (iota reguła). Drugi cel dowodowy to:

n : natIHn : plus n O = n============================plus (S n) O = S n

crush.Qed.

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Równość definiowalna i konwersja

Theorem O plus n : ∀ n : nat, plus O n = n.intro; reflexivity.

Qed.

Theorem n plus O : ∀ n : nat, plus n O = n.induction n.

Pierwszy cel dowodowy to:plus O O = O

reflexivity.

jest prawdziwy z powodu konwersji (iota reguła). Drugi cel dowodowy to:

n : natIHn : plus n O = n============================plus (S n) O = S n

crush.Qed.

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Równość definiowalna i konwersja

Theorem O plus n : ∀ n : nat, plus O n = n.intro; reflexivity.

Qed.

Theorem n plus O : ∀ n : nat, plus n O = n.induction n.

Pierwszy cel dowodowy to:plus O O = O

reflexivity.

jest prawdziwy z powodu konwersji (iota reguła). Drugi cel dowodowy to:

n : natIHn : plus n O = n============================plus (S n) O = S n

crush.Qed.

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Równość definiowalna i konwersja

Theorem O plus n : ∀ n : nat, plus O n = n.intro; reflexivity.

Qed.

Theorem n plus O : ∀ n : nat, plus n O = n.induction n.

Pierwszy cel dowodowy to:plus O O = O

reflexivity.

jest prawdziwy z powodu konwersji (iota reguła). Drugi cel dowodowy to:

n : natIHn : plus n O = n============================plus (S n) O = S n

crush.Qed.

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Predykaty rekurencyjne

Inductive even : nat → Prop :=| EvenO : even O| EvenSS : ∀ n, even n → even (S (S n)).

Theorem even plus : ∀ n m, even n → even m → even (n + m).

induction 1.

m : nat============================even m → even (0 + m)

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Predykaty rekurencyjne

Inductive even : nat → Prop :=| EvenO : even O| EvenSS : ∀ n, even n → even (S (S n)).

Theorem even plus : ∀ n m, even n → even m → even (n + m).

induction 1.

m : nat============================even m → even (0 + m)

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Predykaty rekurencyjne

Inductive even : nat → Prop :=| EvenO : even O| EvenSS : ∀ n, even n → even (S (S n)).

Theorem even plus : ∀ n m, even n → even m → even (n + m).

induction 1.

m : nat============================even m → even (0 + m)

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Predykaty rekurencyjne

Inductive even : nat → Prop :=| EvenO : even O| EvenSS : ∀ n, even n → even (S (S n)).

Theorem even plus : ∀ n m, even n → even m → even (n + m).

induction 1.

m : nat============================even m → even (0 + m)

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Dowód indukcyjny dla Even c.d.

subgoal 2 is:even m → even (S (S n) + m)

intro.

m : natn : natH : even nIHeven : even m → even (n + m)H0 : even m============================even (S (S n) + m)

simpl; constructor.

============================even (n + m)

apply IHeven; assumption.

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Dowód indukcyjny dla Even c.d.

subgoal 2 is:even m → even (S (S n) + m)

intro.

m : natn : natH : even nIHeven : even m → even (n + m)H0 : even m============================even (S (S n) + m)

simpl; constructor.

============================even (n + m)

apply IHeven; assumption.

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Dowód indukcyjny dla Even c.d.

subgoal 2 is:even m → even (S (S n) + m)

intro.

m : natn : natH : even nIHeven : even m → even (n + m)H0 : even m============================even (S (S n) + m)

simpl; constructor.

============================even (n + m)

apply IHeven; assumption.

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Dowód indukcyjny dla Even c.d.

subgoal 2 is:even m → even (S (S n) + m)

intro.

m : natn : natH : even nIHeven : even m → even (n + m)H0 : even m============================even (S (S n) + m)

simpl; constructor.

============================even (n + m)

apply IHeven; assumption.

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Prop to nie bool !

W pustym środowisku programy typu bool zawsze obliczają się dotrue albo false

predykaty logiczne mogą wyrażać własności nierozstrzygalne, npwłasność stopu danej maszyny Turinga na danym wejściudlatego predykaty nie mogą “być w” bool.

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Prop to nie bool !

W pustym środowisku programy typu bool zawsze obliczają się dotrue albo false

predykaty logiczne mogą wyrażać własności nierozstrzygalne, npwłasność stopu danej maszyny Turinga na danym wejściudlatego predykaty nie mogą “być w” bool.

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Prop to nie bool !

W pustym środowisku programy typu bool zawsze obliczają się dotrue albo false

predykaty logiczne mogą wyrażać własności nierozstrzygalne, npwłasność stopu danej maszyny Turinga na danym wejściudlatego predykaty nie mogą “być w” bool.

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Typ produktowy - przypomnienie

• kumulatywność sortów (lub podtypowanie):

Prop ≤ Set ≤ Type1 ≤ Type2 ≤ . . .

• reguła typowania dla typu produktowego

Γ ` A : s1 Γ, x:A ` B : s2Γ ` ∀x:A.B : s2

jeśli s1 i s2 spełniają . . .

s1 ≤ s2, ors2 = Prop

• reguła podtypowania

Γ `M : s1Γ `M : s2

jeśli s1 ≤ s2

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Typ produktowy - przypomnienie

• kumulatywność sortów (lub podtypowanie):

Prop ≤ Set ≤ Type1 ≤ Type2 ≤ . . .

• reguła typowania dla typu produktowego

Γ ` A : s1 Γ, x:A ` B : s2Γ ` ∀x:A.B : s2

jeśli s1 i s2 spełniają . . .

s1 ≤ s2, ors2 = Prop

• reguła podtypowania

Γ `M : s1Γ `M : s2

jeśli s1 ≤ s2

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Typ produktowy - przypomnienie

• kumulatywność sortów (lub podtypowanie):

Prop ≤ Set ≤ Type1 ≤ Type2 ≤ . . .

• reguła typowania dla typu produktowego

Γ ` A : s1 Γ, x:A ` B : s2Γ ` ∀x:A.B : s2

jeśli s1 i s2 spełniają . . .

s1 ≤ s2, ors2 = Prop

• reguła podtypowania

Γ `M : s1Γ `M : s2

jeśli s1 ≤ s2

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Typ produktowy - przypomnienie

• kumulatywność sortów (lub podtypowanie):

Prop ≤ Set ≤ Type1 ≤ Type2 ≤ . . .

• reguła typowania dla typu produktowego

Γ ` A : s1 Γ, x:A ` B : s2Γ ` ∀x:A.B : s2

jeśli s1 i s2 spełniają . . .

s1 ≤ s2, ors2 = Prop

• reguła podtypowania

Γ `M : s1Γ `M : s2

jeśli s1 ≤ s2

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Typ produktowy - przypomnienie

• kumulatywność sortów (lub podtypowanie):

Prop ≤ Set ≤ Type1 ≤ Type2 ≤ . . .

• reguła typowania dla typu produktowego

Γ ` A : s1 Γ, x:A ` B : s2Γ ` ∀x:A.B : s2

jeśli s1 i s2 spełniają . . .

s1 ≤ s2, ors2 = Prop

• reguła podtypowania

Γ `M : s1Γ `M : s2

jeśli s1 ≤ s2

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Typ produktowy - przypomnienie

• kumulatywność sortów (lub podtypowanie):

Prop ≤ Set ≤ Type1 ≤ Type2 ≤ . . .

• reguła typowania dla typu produktowego

Γ ` A : s1 Γ, x:A ` B : s2Γ ` ∀x:A.B : s2

jeśli s1 i s2 spełniają . . .

s1 ≤ s2, ors2 = Prop

• reguła podtypowania

Γ `M : s1Γ `M : s2

jeśli s1 ≤ s2

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Składnia formalna

Assuming ΓI is [I1 : A1; . . . ; Ik : Ak], and ΓC is [c1 : C1; . . . ; cn : Cn],the general typing rules are, for 1 ≤ j ≤ k and 1 ≤ i ≤ n:

Ind(Γ)(ΓI := ΓC ) ∈ E

(Ij : Aj) ∈ E

Ind(Γ)(ΓI := ΓC ) ∈ E

(ci : Ci) ∈ E

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Parametry i zwykłe argumenty

An inductive definition Ind(Γ)(ΓI := ΓC ) admits r inductive parametersif each type of constructors (c : C) in ΓC is such that

C ≡ ∀p1 : P1, . . . ,∀pr : Pr,∀a1 : A1, . . .∀an : An, (I p1 . . . pr t1 . . . tq)

with I one of the inductive definitions in ΓI . We say that n is thenumber of real arguments of the constructor c.

We use the following notation:

Ind(Γ)[r](ΓI := ΓC )

andΓP = [p1 : P1; . . . ; pr : Pr]

The latter will be called the context of parameters.

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Parametry i zwykłe argumenty

An inductive definition Ind(Γ)(ΓI := ΓC ) admits r inductive parametersif each type of constructors (c : C) in ΓC is such that

C ≡ ∀p1 : P1, . . . ,∀pr : Pr,∀a1 : A1, . . .∀an : An, (I p1 . . . pr t1 . . . tq)

with I one of the inductive definitions in ΓI . We say that n is thenumber of real arguments of the constructor c.

We use the following notation:

Ind(Γ)[r](ΓI := ΓC )

andΓP = [p1 : P1; . . . ; pr : Pr]

The latter will be called the context of parameters.

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Przykłady

The List definition has 1 parameter:

Ind()(List : Set→ Set := nil : (∀A : Set, List A),cons : (∀A : Set, A→ List A→ List A) )

This is also the case for this more complex definition where there is arecursive argument on a different instance of List:

Ind()(List : Set→ Set := nil : (∀A : Set, List A),cons : (∀A : Set, A→ List (A→ A)→ List A) )

But the following definition has 0 parameters:

Ind()(List : Set→ Set := nil : (∀A : Set, List A),cons : (∀A : Set, A→ List A→ List (A ∗A)) )

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Przykłady

The List definition has 1 parameter:

Ind()(List : Set→ Set := nil : (∀A : Set, List A),cons : (∀A : Set, A→ List A→ List A) )

This is also the case for this more complex definition where there is arecursive argument on a different instance of List:

Ind()(List : Set→ Set := nil : (∀A : Set, List A),cons : (∀A : Set, A→ List (A→ A)→ List A) )

But the following definition has 0 parameters:

Ind()(List : Set→ Set := nil : (∀A : Set, List A),cons : (∀A : Set, A→ List A→ List (A ∗A)) )

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Przykłady

The List definition has 1 parameter:

Ind()(List : Set→ Set := nil : (∀A : Set, List A),cons : (∀A : Set, A→ List A→ List A) )

This is also the case for this more complex definition where there is arecursive argument on a different instance of List:

Ind()(List : Set→ Set := nil : (∀A : Set, List A),cons : (∀A : Set, A→ List (A→ A)→ List A) )

But the following definition has 0 parameters:

Ind()(List : Set→ Set := nil : (∀A : Set, List A),cons : (∀A : Set, A→ List A→ List (A ∗A)) )

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Zasady budowy definicji indukcyjnych

A type is an arity of sort s if it converts to the sort s or to a product∀ x : T,U with U an arity of sort s.

To put it simply: ∀−−−→x : T , s.

For instance A→ Set or ∀ A : Prop, A→ Prop are arities of sortrespectively Set and Prop.

A type of constructor of I is either a term (I t1 . . . tn) or ∀x : T,C withC recursively a type of constructor of I.

To put it simply: ∀−−−→x : T , (I t1 . . . tn)

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Zasady budowy definicji indukcyjnych

A type is an arity of sort s if it converts to the sort s or to a product∀ x : T,U with U an arity of sort s.

To put it simply: ∀−−−→x : T , s.

For instance A→ Set or ∀ A : Prop, A→ Prop are arities of sortrespectively Set and Prop.

A type of constructor of I is either a term (I t1 . . . tn) or ∀x : T,C withC recursively a type of constructor of I.

To put it simply: ∀−−−→x : T , (I t1 . . . tn)

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Zasady budowy definicji indukcyjnych (c.d.)

The type of constructor C will be said to satisfy the positivity conditionfor a constant I in the following cases:

C = (I t1 . . . tn) and I does not occur free in any ti

C = ∀ x : T, V and I occurs only strictly positively in T and thetype V satisfies the positivity condition for I

To put it simply: C = ∀−−−→x : T , (I t1 . . . tn), where I occurs only strictly

positively in every T

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Zasady budowy definicji indukcyjnych (c.d.)

The type of constructor C will be said to satisfy the positivity conditionfor a constant I in the following cases:

C = (I t1 . . . tn) and I does not occur free in any ti

C = ∀ x : T, V and I occurs only strictly positively in T and thetype V satisfies the positivity condition for I

To put it simply: C = ∀−−−→x : T , (I t1 . . . tn), where I occurs only strictly

positively in every T

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Zasady budowy definicji indukcyjnych (c.d.)

The type of constructor C will be said to satisfy the positivity conditionfor a constant I in the following cases:

C = (I t1 . . . tn) and I does not occur free in any ti

C = ∀ x : T, V and I occurs only strictly positively in T and thetype V satisfies the positivity condition for I

To put it simply: C = ∀−−−→x : T , (I t1 . . . tn), where I occurs only strictly

positively in every T

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Zasady budowy definicji indukcyjnych (c.d.)

The type of constructor C will be said to satisfy the positivity conditionfor a constant I in the following cases:

C = (I t1 . . . tn) and I does not occur free in any ti

C = ∀ x : T, V and I occurs only strictly positively in T and thetype V satisfies the positivity condition for I

To put it simply: C = ∀−−−→x : T , (I t1 . . . tn), where I occurs only strictly

positively in every T

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Zasady budowy definicji indukcyjnych (c.d.)

The constant I occurs strictly positively in T in the following cases:

I does not occur in T

T converts to (I t1 . . . tn) and I does not occur in any of tiT converts to ∀ x : U, V and I does not occur in type U but occursstrictly positively in type V

T converts to (I ′ a1 . . . am t1 . . . tp) where I ′ is the name of aninductive declaration of the formInd(Γ)[m](I : A := c1 : ∀p1 : P1, . . .∀pm : Pm, C1; . . . ;

cn : ∀p1 : P1, . . .∀pm : Pm, Cn )(in particular, it is not mutually defined and it has m parameters)and I does not occur in any of the ti, and the (instantiated) typesof constructor Ci{pj/aj}j=1...m of I ′ satisfy the nested positivitycondition for I

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Zasady budowy definicji indukcyjnych (c.d.)

The constant I occurs strictly positively in T in the following cases:

I does not occur in T

T converts to (I t1 . . . tn) and I does not occur in any of tiT converts to ∀ x : U, V and I does not occur in type U but occursstrictly positively in type V

T converts to (I ′ a1 . . . am t1 . . . tp) where I ′ is the name of aninductive declaration of the formInd(Γ)[m](I : A := c1 : ∀p1 : P1, . . .∀pm : Pm, C1; . . . ;

cn : ∀p1 : P1, . . .∀pm : Pm, Cn )(in particular, it is not mutually defined and it has m parameters)and I does not occur in any of the ti, and the (instantiated) typesof constructor Ci{pj/aj}j=1...m of I ′ satisfy the nested positivitycondition for I

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Zasady budowy definicji indukcyjnych (c.d.)

The constant I occurs strictly positively in T in the following cases:

I does not occur in T

T converts to (I t1 . . . tn) and I does not occur in any of tiT converts to ∀ x : U, V and I does not occur in type U but occursstrictly positively in type V

T converts to (I ′ a1 . . . am t1 . . . tp) where I ′ is the name of aninductive declaration of the formInd(Γ)[m](I : A := c1 : ∀p1 : P1, . . .∀pm : Pm, C1; . . . ;

cn : ∀p1 : P1, . . .∀pm : Pm, Cn )(in particular, it is not mutually defined and it has m parameters)and I does not occur in any of the ti, and the (instantiated) typesof constructor Ci{pj/aj}j=1...m of I ′ satisfy the nested positivitycondition for I

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Zasady budowy definicji indukcyjnych (c.d.)

The constant I occurs strictly positively in T in the following cases:

I does not occur in T

T converts to (I t1 . . . tn) and I does not occur in any of tiT converts to ∀ x : U, V and I does not occur in type U but occursstrictly positively in type V

T converts to (I ′ a1 . . . am t1 . . . tp) where I ′ is the name of aninductive declaration of the formInd(Γ)[m](I : A := c1 : ∀p1 : P1, . . .∀pm : Pm, C1; . . . ;

cn : ∀p1 : P1, . . .∀pm : Pm, Cn )(in particular, it is not mutually defined and it has m parameters)and I does not occur in any of the ti, and the (instantiated) typesof constructor Ci{pj/aj}j=1...m of I ′ satisfy the nested positivitycondition for I

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Zasady budowy definicji indukcyjnych (c.d.)

The type of constructor T of I ′ satisfies the nested positivity conditionfor a constant I in the following cases:

T = (I ′ b1 . . . bm u1 . . . up), I ′ is an inductive definition with mparameters and I does not occur in any ui

T = ∀ x : U, V and I occurs only strictly positively in U and thetype V satisfies the nested positivity condition for I

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Zasady budowy definicji indukcyjnych (c.d.)

The type of constructor T of I ′ satisfies the nested positivity conditionfor a constant I in the following cases:

T = (I ′ b1 . . . bm u1 . . . up), I ′ is an inductive definition with mparameters and I does not occur in any ui

T = ∀ x : U, V and I occurs only strictly positively in U and thetype V satisfies the nested positivity condition for I

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Zasady budowy definicji indukcyjnych (c.d.)

Let E be an environment and Γ,ΓP ,ΓI ,ΓC are contexts such that ΓI is[I1 : ∀ΓP , A1; . . . ; Ik : ∀ΓP , Ak] and ΓC is[c1 : ∀ΓP , C1; . . . ; cn : ∀ΓP , Cn].

(E[Γ; ΓP ] ` Aj : s′j)j=1...k (E[Γ; ΓI ; ΓP ] ` Ci : sqi)i=1...n

WF(E; Ind(Γ)[p](ΓI := ΓC ))[Γ]

provided that the following side conditions hold:k > 0 and all of Ij and ci are distinct names for j = 1 . . . k andi = 1 . . . n,p is the number of parameters of Ind(Γ)(ΓI := ΓC ) and ΓP is thecontext of parameters,for j = 1 . . . k we have that Aj is an arity of sort sj and Ij /∈ Γ ∪E,for i = 1 . . . n we have that Ci is a type of constructor of Iqi whichsatisfies the positivity condition for I1 . . . Ik and ci /∈ Γ ∪ E.

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Zasady budowy definicji indukcyjnych (c.d.)

Let E be an environment and Γ,ΓP ,ΓI ,ΓC are contexts such that ΓI is[I1 : ∀ΓP , A1; . . . ; Ik : ∀ΓP , Ak] and ΓC is[c1 : ∀ΓP , C1; . . . ; cn : ∀ΓP , Cn].

(E[Γ; ΓP ] ` Aj : s′j)j=1...k (E[Γ; ΓI ; ΓP ] ` Ci : sqi)i=1...n

WF(E; Ind(Γ)[p](ΓI := ΓC ))[Γ]

provided that the following side conditions hold:k > 0 and all of Ij and ci are distinct names for j = 1 . . . k andi = 1 . . . n,p is the number of parameters of Ind(Γ)(ΓI := ΓC ) and ΓP is thecontext of parameters,for j = 1 . . . k we have that Aj is an arity of sort sj and Ij /∈ Γ ∪E,for i = 1 . . . n we have that Ci is a type of constructor of Iqi whichsatisfies the positivity condition for I1 . . . Ik and ci /∈ Γ ∪ E.

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Zasady budowy definicji indukcyjnych (c.d.)

Let E be an environment and Γ,ΓP ,ΓI ,ΓC are contexts such that ΓI is[I1 : ∀ΓP , A1; . . . ; Ik : ∀ΓP , Ak] and ΓC is[c1 : ∀ΓP , C1; . . . ; cn : ∀ΓP , Cn].

(E[Γ; ΓP ] ` Aj : s′j)j=1...k (E[Γ; ΓI ; ΓP ] ` Ci : sqi)i=1...n

WF(E; Ind(Γ)[p](ΓI := ΓC ))[Γ]

provided that the following side conditions hold:k > 0 and all of Ij and ci are distinct names for j = 1 . . . k andi = 1 . . . n,p is the number of parameters of Ind(Γ)(ΓI := ΓC ) and ΓP is thecontext of parameters,for j = 1 . . . k we have that Aj is an arity of sort sj and Ij /∈ Γ ∪E,for i = 1 . . . n we have that Ci is a type of constructor of Iqi whichsatisfies the positivity condition for I1 . . . Ik and ci /∈ Γ ∪ E.

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Zasady budowy definicji indukcyjnych (c.d.)

Let E be an environment and Γ,ΓP ,ΓI ,ΓC are contexts such that ΓI is[I1 : ∀ΓP , A1; . . . ; Ik : ∀ΓP , Ak] and ΓC is[c1 : ∀ΓP , C1; . . . ; cn : ∀ΓP , Cn].

(E[Γ; ΓP ] ` Aj : s′j)j=1...k (E[Γ; ΓI ; ΓP ] ` Ci : sqi)i=1...n

WF(E; Ind(Γ)[p](ΓI := ΓC ))[Γ]

provided that the following side conditions hold:k > 0 and all of Ij and ci are distinct names for j = 1 . . . k andi = 1 . . . n,p is the number of parameters of Ind(Γ)(ΓI := ΓC ) and ΓP is thecontext of parameters,for j = 1 . . . k we have that Aj is an arity of sort sj and Ij /∈ Γ ∪E,for i = 1 . . . n we have that Ci is a type of constructor of Iqi whichsatisfies the positivity condition for I1 . . . Ik and ci /∈ Γ ∪ E.

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Przykład: “drzewa arności list”

Inductive nat tree : Set :=| NNode’ : nat → list nat tree → nat tree.

Inductive list (A:Set): Set :=| nil : list A| cons : A → list A → list A.

Akceptowane przez Coqa, ale nie akceptowalne według definicji zmanuala....

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Przykład: “drzewa arności list”

Inductive nat tree : Set :=| NNode’ : nat → list nat tree → nat tree.

Inductive list (A:Set): Set :=| nil : list A| cons : A → list A → list A.

Akceptowane przez Coqa, ale nie akceptowalne według definicji zmanuala....

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Przykład: “drzewa arności list”

Inductive nat tree : Set :=| NNode’ : nat → list nat tree → nat tree.

Inductive list (A:Set): Set :=| nil : list A| cons : A → list A → list A.

Akceptowane przez Coqa, ale nie akceptowalne według definicji zmanuala....

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Przykład: “drzewa arności list” c.d.

Warunki z manuala powinny sprowadzać się do sprawdzenia poprawnościtakich typów:

Inductive nat tree : Set :=| NNode’ : nat → list nat tree → nat tree.

with list nat tree : Set :=| nil : list nat tree| cons : nat tree → list nat tree → list nat tree.

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Przykład: “drzewa arności list” c.d.

Warunki z manuala powinny sprowadzać się do sprawdzenia poprawnościtakich typów:

Inductive nat tree : Set :=| NNode’ : nat → list nat tree → nat tree.

with list nat tree : Set :=| nil : list nat tree| cons : nat tree → list nat tree → list nat tree.

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Polimorfizm definicji indukcyjnych

Jeśli definicja jest w sorcie Type (i ma parametry typu Type),

Definition I (P1 : Type) ... (Pn : Type) : ∀..., Type :=...

to w typowaniu instancji „opuszcza się” sort tak nisko jak „można”.

(I t1 ... tk) : Set

Formalnie używana jest dodatkowa reguła typowania Ind-Family, którachwilowo zastępuje Ind-Const i App, dając typ mniejszy w sensie ≤

Co to znaczy „można”?definicja z nowymi sortami musi być poprawna, czylipusty typ lub mała definicja indukcyjna o jednym konstruktorze są wProp, mała definicja indukcyjna o wielu konstruktorach jest w Set,pozostałe w Type

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Polimorfizm definicji indukcyjnych

Jeśli definicja jest w sorcie Type (i ma parametry typu Type),

Definition I (P1 : Type) ... (Pn : Type) : ∀..., Type :=...

to w typowaniu instancji „opuszcza się” sort tak nisko jak „można”.

(I t1 ... tk) : Set

Formalnie używana jest dodatkowa reguła typowania Ind-Family, którachwilowo zastępuje Ind-Const i App, dając typ mniejszy w sensie ≤

Co to znaczy „można”?definicja z nowymi sortami musi być poprawna, czylipusty typ lub mała definicja indukcyjna o jednym konstruktorze są wProp, mała definicja indukcyjna o wielu konstruktorach jest w Set,pozostałe w Type

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Polimorfizm definicji indukcyjnych

Jeśli definicja jest w sorcie Type (i ma parametry typu Type),

Definition I (P1 : Type) ... (Pn : Type) : ∀..., Type :=...

to w typowaniu instancji „opuszcza się” sort tak nisko jak „można”.

(I t1 ... tk) : Set

Formalnie używana jest dodatkowa reguła typowania Ind-Family, którachwilowo zastępuje Ind-Const i App, dając typ mniejszy w sensie ≤

Co to znaczy „można”?definicja z nowymi sortami musi być poprawna, czylipusty typ lub mała definicja indukcyjna o jednym konstruktorze są wProp, mała definicja indukcyjna o wielu konstruktorach jest w Set,pozostałe w Type

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Polimorfizm definicji indukcyjnych

Jeśli definicja jest w sorcie Type (i ma parametry typu Type),

Definition I (P1 : Type) ... (Pn : Type) : ∀..., Type :=...

to w typowaniu instancji „opuszcza się” sort tak nisko jak „można”.

(I t1 ... tk) : Set

Formalnie używana jest dodatkowa reguła typowania Ind-Family, którachwilowo zastępuje Ind-Const i App, dając typ mniejszy w sensie ≤

Co to znaczy „można”?definicja z nowymi sortami musi być poprawna, czylipusty typ lub mała definicja indukcyjna o jednym konstruktorze są wProp, mała definicja indukcyjna o wielu konstruktorach jest w Set,pozostałe w Type

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Polimorfizm definicji indukcyjnych

Jeśli definicja jest w sorcie Type (i ma parametry typu Type),

Definition I (P1 : Type) ... (Pn : Type) : ∀..., Type :=...

to w typowaniu instancji „opuszcza się” sort tak nisko jak „można”.

(I t1 ... tk) : Set

Formalnie używana jest dodatkowa reguła typowania Ind-Family, którachwilowo zastępuje Ind-Const i App, dając typ mniejszy w sensie ≤

Co to znaczy „można”?definicja z nowymi sortami musi być poprawna, czylipusty typ lub mała definicja indukcyjna o jednym konstruktorze są wProp, mała definicja indukcyjna o wielu konstruktorach jest w Set,pozostałe w Type

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Przykłady polimorfizmu sortów - prod

Inductive prod (A B:Type) : Type :=| pair : A → B → prod A B.

Check (fun A:Set ⇒ prod A).fun A : Set ⇒ prod A : Set → Type → Type

Check (fun A:Prop ⇒ prod A A).fun A : Prop ⇒ prod A A : Prop → Prop

Check (fun (A:Prop) (B:Set) ⇒ prod A B).fun (A : Prop) (B : Set) ⇒ prod A B : Prop → Set → Set

Check (fun (A:Type) (B:Prop) ⇒ prod A B).fun (A : Type) (B : Prop) ⇒ prod A B : Type → Prop → Type

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Przykłady polimorfizmu sortów - prod

Inductive prod (A B:Type) : Type :=| pair : A → B → prod A B.

Check (fun A:Set ⇒ prod A).fun A : Set ⇒ prod A : Set → Type → Type

Check (fun A:Prop ⇒ prod A A).fun A : Prop ⇒ prod A A : Prop → Prop

Check (fun (A:Prop) (B:Set) ⇒ prod A B).fun (A : Prop) (B : Set) ⇒ prod A B : Prop → Set → Set

Check (fun (A:Type) (B:Prop) ⇒ prod A B).fun (A : Type) (B : Prop) ⇒ prod A B : Type → Prop → Type

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Przykłady polimorfizmu sortów - prod

Inductive prod (A B:Type) : Type :=| pair : A → B → prod A B.

Check (fun A:Set ⇒ prod A).fun A : Set ⇒ prod A : Set → Type → Type

Check (fun A:Prop ⇒ prod A A).fun A : Prop ⇒ prod A A : Prop → Prop

Check (fun (A:Prop) (B:Set) ⇒ prod A B).fun (A : Prop) (B : Set) ⇒ prod A B : Prop → Set → Set

Check (fun (A:Type) (B:Prop) ⇒ prod A B).fun (A : Type) (B : Prop) ⇒ prod A B : Type → Prop → Type

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Przykłady polimorfizmu sortów - prod

Inductive prod (A B:Type) : Type :=| pair : A → B → prod A B.

Check (fun A:Set ⇒ prod A).fun A : Set ⇒ prod A : Set → Type → Type

Check (fun A:Prop ⇒ prod A A).fun A : Prop ⇒ prod A A : Prop → Prop

Check (fun (A:Prop) (B:Set) ⇒ prod A B).fun (A : Prop) (B : Set) ⇒ prod A B : Prop → Set → Set

Check (fun (A:Type) (B:Prop) ⇒ prod A B).fun (A : Type) (B : Prop) ⇒ prod A B : Type → Prop → Type

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń

Predykaty indukcyjne Typowanie typów indukcyjnych

Przykłady polimorfizmu sortów - prod

Inductive prod (A B:Type) : Type :=| pair : A → B → prod A B.

Check (fun A:Set ⇒ prod A).fun A : Set ⇒ prod A : Set → Type → Type

Check (fun A:Prop ⇒ prod A A).fun A : Prop ⇒ prod A A : Prop → Prop

Check (fun (A:Prop) (B:Set) ⇒ prod A B).fun (A : Prop) (B : Set) ⇒ prod A B : Prop → Set → Set

Check (fun (A:Type) (B:Prop) ⇒ prod A B).fun (A : Type) (B : Prop) ⇒ prod A B : Type → Prop → Type

Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń