Programowanie z typami zaleznymi i dowodzenie twierdzendaria/PTZ/Slajdy/slajdy03.pdfPredykaty...
Transcript of Programowanie z typami zaleznymi i dowodzenie twierdzendaria/PTZ/Slajdy/slajdy03.pdfPredykaty...
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
Theorem exist2 : ∀ n m : nat, (∃ x : nat, n + x = m) → n ≤ m.
destruct 1.
n : natm : natx : natH : n + x = m============================n ≤ m
crush.Qed.
Typowanie i typy indukcyjne Programowanie z typami zależnymi i dowodzenie twierdzeń
Predykaty indukcyjne Typowanie typów indukcyjnych
Theorem exist2 : ∀ n m : nat, (∃ x : nat, n + x = m) → n ≤ m.
destruct 1.
n : natm : natx : natH : n + x = m============================n ≤ m
crush.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ń