Efgects, Substitution and Induction An Explosive Mnage Trois - - PowerPoint PPT Presentation

efgects substitution and induction
SMART_READER_LITE
LIVE PREVIEW

Efgects, Substitution and Induction An Explosive Mnage Trois - - PowerPoint PPT Presentation

Efgects, Substitution and Induction An Explosive Mnage Trois Pierre-Marie Pdrot , Nicolas Tabareau INRIA TYPES 2019 13th June 2019 Pdrot & Tabareau (INRIA) An Explosive Mnage Trois 13/06/2019 1 / 19 CIC, a very fancy


slide-1
SLIDE 1

Efgects, Substitution and Induction

An Explosive Ménage à Trois Pierre-Marie Pédrot, Nicolas Tabareau

INRIA

TYPES 2019

13th June 2019

Pédrot & Tabareau (INRIA) An Explosive Ménage à Trois 13/06/2019 1 / 19

slide-2
SLIDE 2

It’s Time to CIC Ass CIC, the Calculus of Inductive Constructions.

CIC, a very fancy intuitionistic logical system. Not just higher-order logic, not just fjrst-order logic First class notion of computation and crazy inductive types CIC, a very powerful functional programming language. Finest types to describe your programs No clear phase separation between runtime and compile time

The Pinnacle of the Curry-Howard correspondence

Pédrot & Tabareau (INRIA) An Explosive Ménage à Trois 13/06/2019 2 / 19

slide-3
SLIDE 3

It’s Time to CIC Ass CIC, the Calculus of Inductive Constructions.

CIC, a very fancy intuitionistic logical system. Not just higher-order logic, not just fjrst-order logic First class notion of computation and crazy inductive types CIC, a very powerful functional programming language. Finest types to describe your programs No clear phase separation between runtime and compile time

The Pinnacle of the Curry-Howard correspondence

Pédrot & Tabareau (INRIA) An Explosive Ménage à Trois 13/06/2019 2 / 19

slide-4
SLIDE 4

It’s Time to CIC Ass CIC, the Calculus of Inductive Constructions.

CIC, a very fancy intuitionistic logical system. Not just higher-order logic, not just fjrst-order logic First class notion of computation and crazy inductive types CIC, a very powerful functional programming language. Finest types to describe your programs No clear phase separation between runtime and compile time

The Pinnacle of the Curry-Howard correspondence

Pédrot & Tabareau (INRIA) An Explosive Ménage à Trois 13/06/2019 2 / 19

slide-5
SLIDE 5

It’s Time to CIC Ass CIC, the Calculus of Inductive Constructions.

CIC, a very fancy intuitionistic logical system. Not just higher-order logic, not just fjrst-order logic First class notion of computation and crazy inductive types CIC, a very powerful functional programming language. Finest types to describe your programs No clear phase separation between runtime and compile time

The Pinnacle of the Curry-Howard correspondence

Pédrot & Tabareau (INRIA) An Explosive Ménage à Trois 13/06/2019 2 / 19

slide-6
SLIDE 6

It’s Time to CIC Ass CIC, the Calculus of Inductive Constructions.

CIC, a very fancy intuitionistic logical system. Not just higher-order logic, not just fjrst-order logic First class notion of computation and crazy inductive types CIC, a very powerful functional programming language. Finest types to describe your programs No clear phase separation between runtime and compile time

The Pinnacle of the Curry-Howard correspondence

Pédrot & Tabareau (INRIA) An Explosive Ménage à Trois 13/06/2019 2 / 19

slide-7
SLIDE 7

The Most Important Issue of Them All Yet CIC sufgers from a fundamental fmaw.

You want to show the wonders of Coq to a fellow programmer You fjre your favourite IDE ... and you’re asked the dreadful question.

Could you write a Hello World?

Pédrot & Tabareau (INRIA) An Explosive Ménage à Trois 13/06/2019 3 / 19

slide-8
SLIDE 8

The Most Important Issue of Them All Yet CIC sufgers from a fundamental fmaw.

You want to show the wonders of Coq to a fellow programmer You fjre your favourite IDE ... and you’re asked the dreadful question.

Could you write a Hello World?

Pédrot & Tabareau (INRIA) An Explosive Ménage à Trois 13/06/2019 3 / 19

slide-9
SLIDE 9

The Most Important Issue of Them All Yet CIC sufgers from a fundamental fmaw.

You want to show the wonders of Coq to a fellow programmer You fjre your favourite IDE ... and you’re asked the dreadful question.

Could you write a Hello World?

Pédrot & Tabareau (INRIA) An Explosive Ménage à Trois 13/06/2019 3 / 19

slide-10
SLIDE 10

The Most Important Issue of Them All, Bis

Intuitionistic Logic ⇔ Functional Programming

Thus, the same problem for mathematically inclined users.

How do I reason classicall y?

Pédrot & Tabareau (INRIA) An Explosive Ménage à Trois 13/06/2019 4 / 19

slide-11
SLIDE 11

The Most Important Issue of Them All, Bis

Intuitionistic Logic ⇔ Functional Programming

Thus, the same problem for mathematically inclined users.

How do I reason classicall y?

Pédrot & Tabareau (INRIA) An Explosive Ménage à Trois 13/06/2019 4 / 19

slide-12
SLIDE 12

The Most Important Issue of Them All, Bis

Intuitionistic Logic ⇔ Functional Programming

Thus, the same problem for mathematically inclined users.

How do I reason classicall y?

Pédrot & Tabareau (INRIA) An Explosive Ménage à Trois 13/06/2019 4 / 19

slide-13
SLIDE 13

The Most Important Issue of Them All, Bis

Intuitionistic Logic ⇔ Functional Programming

Thus, the same problem for mathematically inclined users.

How do I reason classicall y?

Pédrot & Tabareau (INRIA) An Explosive Ménage à Trois 13/06/2019 4 / 19

slide-14
SLIDE 14

Thesis We want a type theory with efgects! To program more!

Non-termination Exceptions State...

To prove more!

Classical logic Univalence Choice...

Pédrot & Tabareau (INRIA) An Explosive Ménage à Trois 13/06/2019 5 / 19

slide-15
SLIDE 15

Thesis We want a type theory with efgects! To program more!

Non-termination Exceptions State...

To prove more!

Classical logic Univalence Choice...

Pédrot & Tabareau (INRIA) An Explosive Ménage à Trois 13/06/2019 5 / 19

slide-16
SLIDE 16

Something is Rotten in the State of Type Theory

Classical logic does not play well with type theory. Barthe and Uustalu: CPS cannot interpret dependent elimination Herbelin’s paradox: CIC + callcc is unsound!

We have been working on efgectful type theories

We are not the only ones, but our specialty:

We justify them through program translations into CIC itself.

Forcing, reader monad, exceptions, free algebraic...

Efgectful theories are always half-broken dependent elimination has to be restricted (BTT)

  • r consistency forsaken, or worse

Pédrot & Tabareau (INRIA) An Explosive Ménage à Trois 13/06/2019 6 / 19

slide-17
SLIDE 17

Something is Rotten in the State of Type Theory

Classical logic does not play well with type theory. Barthe and Uustalu: CPS cannot interpret dependent elimination Herbelin’s paradox: CIC + callcc is unsound!

We have been working on efgectful type theories

We are not the only ones, but our specialty:

We justify them through program translations into CIC itself.

Forcing, reader monad, exceptions, free algebraic...

Efgectful theories are always half-broken dependent elimination has to be restricted (BTT)

  • r consistency forsaken, or worse

Pédrot & Tabareau (INRIA) An Explosive Ménage à Trois 13/06/2019 6 / 19

slide-18
SLIDE 18

Something is Rotten in the State of Type Theory

Classical logic does not play well with type theory. Barthe and Uustalu: CPS cannot interpret dependent elimination Herbelin’s paradox: CIC + callcc is unsound!

We have been working on efgectful type theories

We are not the only ones, but our specialty:

We justify them through program translations into CIC itself.

Forcing, reader monad, exceptions, free algebraic...

Efgectful theories are always half-broken dependent elimination has to be restricted (BTT)

  • r consistency forsaken, or worse

Pédrot & Tabareau (INRIA) An Explosive Ménage à Trois 13/06/2019 6 / 19

slide-19
SLIDE 19

Something is Rotten in the State of Type Theory

Classical logic does not play well with type theory. Barthe and Uustalu: CPS cannot interpret dependent elimination Herbelin’s paradox: CIC + callcc is unsound!

We have been working on efgectful type theories

We are not the only ones, but our specialty:

We justify them through program translations into CIC itself.

Forcing, reader monad, exceptions, free algebraic...

Efgectful theories are always half-broken dependent elimination has to be restricted (BTT)

  • r consistency forsaken, or worse

Pédrot & Tabareau (INRIA) An Explosive Ménage à Trois 13/06/2019 6 / 19

slide-20
SLIDE 20

The Important Bit This is not a coincidence!

Herbelin / Barthe-Uustalu results are instances of a generic phenomenon! Also, this is kind of folklore. ... but I don’t recall reading it formally anywhere.

Pédrot & Tabareau (INRIA) An Explosive Ménage à Trois 13/06/2019 7 / 19

slide-21
SLIDE 21

The Important Bit This is not a coincidence!

Herbelin / Barthe-Uustalu results are instances of a generic phenomenon! Also, this is kind of folklore. ... but I don’t recall reading it formally anywhere.

Pédrot & Tabareau (INRIA) An Explosive Ménage à Trois 13/06/2019 7 / 19

slide-22
SLIDE 22

Efgects, Efgects Everywhere!

Defjnition

A type theory has observable efgects if there is a closed term t : B that is not observationally equivalent to a value, i.e. there is a context C[·] s.t. C[true] ≡ true and C[false] ≡ true but C[t] ≡ false This happens for many kind of efgects, including continuations. Such terms are typically called non-standard booleans.

e.g. a function is_empty A A deciding inhabitation of a type.

Pédrot & Tabareau (INRIA) An Explosive Ménage à Trois 13/06/2019 8 / 19

slide-23
SLIDE 23

Efgects, Efgects Everywhere!

Defjnition

A type theory has observable efgects if there is a closed term t : B that is not observationally equivalent to a value, i.e. there is a context C[·] s.t. C[true] ≡ true and C[false] ≡ true but C[t] ≡ false This happens for many kind of efgects, including continuations. Such terms are typically called non-standard booleans.

e.g. a function is_empty : ΠA. A → B deciding inhabitation of a type.

Pédrot & Tabareau (INRIA) An Explosive Ménage à Trois 13/06/2019 8 / 19

slide-24
SLIDE 24

A Tension Build-up

Defjnition

A type theory enjoys substitution if the following rule is derivable. Γ, x : X ⊢ • : A Γ ⊢ t : X Γ ⊢ • : A{x := t} Substitution is usually taken for granted ... hint: this is a bias

Pédrot & Tabareau (INRIA) An Explosive Ménage à Trois 13/06/2019 9 / 19

slide-25
SLIDE 25

A Tension Build-up

Defjnition

A type theory enjoys substitution if the following rule is derivable. Γ, x : X ⊢ • : A Γ ⊢ t : X Γ ⊢ • : A{x := t} Substitution is usually taken for granted ... hint: this is a bias

Pédrot & Tabareau (INRIA) An Explosive Ménage à Trois 13/06/2019 9 / 19

slide-26
SLIDE 26

Almost There

Defjnition

A type theory enjoys dependent elimination on booleans if we have: Γ, b : B ⊢ P : □ Γ ⊢ • : P{b := true} Γ ⊢ • : P{b := false} Γ, b : B ⊢ • : P The landmark of dependent type theory, used to encode induction! Absence of dependent elimination smells of trivial theories.

Pédrot & Tabareau (INRIA) An Explosive Ménage à Trois 13/06/2019 10 / 19

slide-27
SLIDE 27

Almost There

Defjnition

A type theory enjoys dependent elimination on booleans if we have: Γ, b : B ⊢ P : □ Γ ⊢ • : P{b := true} Γ ⊢ • : P{b := false} Γ, b : B ⊢ • : P The landmark of dependent type theory, used to encode induction! Absence of dependent elimination smells of trivial theories.

Pédrot & Tabareau (INRIA) An Explosive Ménage à Trois 13/06/2019 10 / 19

slide-28
SLIDE 28

« Ciel, mon mari ! »

Sounds like desirable features, right? Theorem (Explosive Ménage à Trois a.k.a. Fire Triangle)

Efgects + substitution + dep. elimination logically inconsistent.

Pédrot & Tabareau (INRIA) An Explosive Ménage à Trois 13/06/2019 11 / 19

slide-29
SLIDE 29

« Ciel, mon mari ! »

Sounds like desirable features, right? Theorem (Explosive Ménage à Trois a.k.a. Fire Triangle)

Efgects + substitution + dep. elimination ⊢ logically inconsistent.

Pédrot & Tabareau (INRIA) An Explosive Ménage à Trois 13/06/2019 11 / 19

slide-30
SLIDE 30

There Is No Free Lunch

The proof is actually straightforward.

Proof.

If C distinguishes boolean values from an efgectful term M, prove by dependent elimination Π(b : B). C[b] = false, apply to M and derive true = false. We essentially retrofjtted the defjnition of efgects to make it work. ‘But most efgects are also observables efgects! So it’s not cheating either. And now for a high-level overview of the problem and solutions

Pédrot & Tabareau (INRIA) An Explosive Ménage à Trois 13/06/2019 12 / 19

slide-31
SLIDE 31

There Is No Free Lunch

The proof is actually straightforward.

Proof.

If C distinguishes boolean values from an efgectful term M, prove by dependent elimination Π(b : B). C[b] = false, apply to M and derive true = false. We essentially retrofjtted the defjnition of efgects to make it work. ‘But most efgects are also observables efgects! So it’s not cheating either. And now for a high-level overview of the problem and solutions

Pédrot & Tabareau (INRIA) An Explosive Ménage à Trois 13/06/2019 12 / 19

slide-32
SLIDE 32

There Is No Free Lunch

The proof is actually straightforward.

Proof.

If C distinguishes boolean values from an efgectful term M, prove by dependent elimination Π(b : B). C[b] = false, apply to M and derive true = false. We essentially retrofjtted the defjnition of efgects to make it work. ‘But most efgects are also observables efgects! So it’s not cheating either. And now for a high-level overview of the problem and solutions

Pédrot & Tabareau (INRIA) An Explosive Ménage à Trois 13/06/2019 12 / 19

slide-33
SLIDE 33

There Is No Free Lunch

The proof is actually straightforward.

Proof.

If C distinguishes boolean values from an efgectful term M, prove by dependent elimination Π(b : B). C[b] = false, apply to M and derive true = false. We essentially retrofjtted the defjnition of efgects to make it work. ‘But most efgects are also observables efgects! So it’s not cheating either. And now for a high-level overview of the problem and solutions

Pédrot & Tabareau (INRIA) An Explosive Ménage à Trois 13/06/2019 12 / 19

slide-34
SLIDE 34

It is not a Bug, it is a Feature™

Dependency entails one major difgerence with usual type systems. Meet conversion: A B M B M A Bad news 1

Typing rules embed the dynamics of programs!

Combine that with this other observation and we’re in trouble. Bad news 2

Efgects make reduction strategies relevant.

Pédrot & Tabareau (INRIA) An Explosive Ménage à Trois 13/06/2019 13 / 19

slide-35
SLIDE 35

It is not a Bug, it is a Feature™

Dependency entails one major difgerence with usual type systems. Meet conversion: A ≡β B Γ ⊢ M : B Γ ⊢ M : A Bad news 1

Typing rules embed the dynamics of programs!

Combine that with this other observation and we’re in trouble. Bad news 2

Efgects make reduction strategies relevant.

Pédrot & Tabareau (INRIA) An Explosive Ménage à Trois 13/06/2019 13 / 19

slide-36
SLIDE 36

It is not a Bug, it is a Feature™

Dependency entails one major difgerence with usual type systems. Meet conversion: A ≡β B Γ ⊢ M : B Γ ⊢ M : A Bad news 1

Typing rules embed the dynamics of programs!

Combine that with this other observation and we’re in trouble. Bad news 2

Efgects make reduction strategies relevant.

Pédrot & Tabareau (INRIA) An Explosive Ménage à Trois 13/06/2019 13 / 19

slide-37
SLIDE 37

It is not a Bug, it is a Feature™

Dependency entails one major difgerence with usual type systems. Meet conversion: A ≡β B Γ ⊢ M : B Γ ⊢ M : A Bad news 1

Typing rules embed the dynamics of programs!

Combine that with this other observation and we’re in trouble. Bad news 2

Efgects make reduction strategies relevant.

Pédrot & Tabareau (INRIA) An Explosive Ménage à Trois 13/06/2019 13 / 19

slide-38
SLIDE 38

Reduction in an Efgectful World Call-by-name vs. Call-by-value

Call-by-name: functions well-behaved vs. inductives ill-behaved Call-by-value: inductives well-behaved vs. functions ill-behaved In call-by-name + efgects: x M N M x N arbitrary substitution b bool M fail non-standard booleans Substitution is a feature of call-by-name In call-by-value + efgects: x M V M x V substitute only values b M N b M V boolean values are booleans Dependent elimination is a feature of call-by-value

Pédrot & Tabareau (INRIA) An Explosive Ménage à Trois 13/06/2019 14 / 19

slide-39
SLIDE 39

Reduction in an Efgectful World Call-by-name vs. Call-by-value

Call-by-name: functions well-behaved vs. inductives ill-behaved Call-by-value: inductives well-behaved vs. functions ill-behaved In call-by-name + efgects: x M N M x N arbitrary substitution b bool M fail non-standard booleans Substitution is a feature of call-by-name In call-by-value + efgects: x M V M x V substitute only values b M N b M V boolean values are booleans Dependent elimination is a feature of call-by-value

Pédrot & Tabareau (INRIA) An Explosive Ménage à Trois 13/06/2019 14 / 19

slide-40
SLIDE 40

Reduction in an Efgectful World Call-by-name vs. Call-by-value

Call-by-name: functions well-behaved vs. inductives ill-behaved Call-by-value: inductives well-behaved vs. functions ill-behaved In call-by-name + efgects: (λx. M) N ≡ M{x := N} ⇝ arbitrary substitution (λb : bool. M) fail ⇝ non-standard booleans Substitution is a feature of call-by-name In call-by-value + efgects: x M V M x V substitute only values b M N b M V boolean values are booleans Dependent elimination is a feature of call-by-value

Pédrot & Tabareau (INRIA) An Explosive Ménage à Trois 13/06/2019 14 / 19

slide-41
SLIDE 41

Reduction in an Efgectful World Call-by-name vs. Call-by-value

Call-by-name: functions well-behaved vs. inductives ill-behaved Call-by-value: inductives well-behaved vs. functions ill-behaved In call-by-name + efgects: (λx. M) N ≡ M{x := N} ⇝ arbitrary substitution (λb : bool. M) fail ⇝ non-standard booleans Substitution is a feature of call-by-name In call-by-value + efgects: (λx. M) V ≡ M{x := V} ⇝ substitute only values (λb : B. M) N ≡ (λb : B. M) V ⇝ boolean values are booleans Dependent elimination is a feature of call-by-value

Pédrot & Tabareau (INRIA) An Explosive Ménage à Trois 13/06/2019 14 / 19

slide-42
SLIDE 42

Impossible is not French

Three knobs ⇒ Four solutions Down with efgects: CBN and CBV reconcile This is good ol’ CIC, Keep Calm and Carry on. Go CBN and restrict dependent elimination: Baclofen Type Theory if M then N else N if M then P else P CBV rules, respect values, and dump substitution: one weird trick The least conservative approach Who cares about consistency? I want all! A paradigm shift: from type theory to dependent languages, e.g. ExTT

Pédrot & Tabareau (INRIA) An Explosive Ménage à Trois 13/06/2019 15 / 19

slide-43
SLIDE 43

Impossible is not French

Three knobs ⇒ Four solutions ▷ Down with efgects: CBN and CBV reconcile This is good ol’ CIC, Keep Calm and Carry on. Go CBN and restrict dependent elimination: Baclofen Type Theory if M then N else N if M then P else P CBV rules, respect values, and dump substitution: one weird trick The least conservative approach Who cares about consistency? I want all! A paradigm shift: from type theory to dependent languages, e.g. ExTT

Pédrot & Tabareau (INRIA) An Explosive Ménage à Trois 13/06/2019 15 / 19

slide-44
SLIDE 44

Impossible is not French

Three knobs ⇒ Four solutions ▷ Down with efgects: CBN and CBV reconcile This is good ol’ CIC, Keep Calm and Carry on. ▷ Go CBN and restrict dependent elimination: Baclofen Type Theory if M then N1 else N2 : if M then P1 else P2 CBV rules, respect values, and dump substitution: one weird trick The least conservative approach Who cares about consistency? I want all! A paradigm shift: from type theory to dependent languages, e.g. ExTT

Pédrot & Tabareau (INRIA) An Explosive Ménage à Trois 13/06/2019 15 / 19

slide-45
SLIDE 45

Impossible is not French

Three knobs ⇒ Four solutions ▷ Down with efgects: CBN and CBV reconcile This is good ol’ CIC, Keep Calm and Carry on. ▷ Go CBN and restrict dependent elimination: Baclofen Type Theory if M then N1 else N2 : if M then P1 else P2 ▷ CBV rules, respect values, and dump substitution: one weird trick The least conservative approach Who cares about consistency? I want all! A paradigm shift: from type theory to dependent languages, e.g. ExTT

Pédrot & Tabareau (INRIA) An Explosive Ménage à Trois 13/06/2019 15 / 19

slide-46
SLIDE 46

Impossible is not French

Three knobs ⇒ Four solutions ▷ Down with efgects: CBN and CBV reconcile This is good ol’ CIC, Keep Calm and Carry on. ▷ Go CBN and restrict dependent elimination: Baclofen Type Theory if M then N1 else N2 : if M then P1 else P2 ▷ CBV rules, respect values, and dump substitution: one weird trick The least conservative approach ▷ Who cares about consistency? I want all! A paradigm shift: from type theory to dependent languages, e.g. ExTT

Pédrot & Tabareau (INRIA) An Explosive Ménage à Trois 13/06/2019 15 / 19

slide-47
SLIDE 47

A Generic Workaround

We have a proposal for a generalization of CBPV to factor both.

CBPV

(We had to pick a fancy name.)

The main novelties: two for the price of one Not one, but two parallel hierarchies of universes:

v vs. c!

Not one, but two let-bindings!

t F A X

c

x A u X let x t in u X t F A x A X

c

x A u X dlet x t in u let x t in X

Justifjed by all of our syntactic models so far (and we have quite a few)

Pédrot & Tabareau (INRIA) An Explosive Ménage à Trois 13/06/2019 16 / 19

slide-48
SLIDE 48

A Generic Workaround

We have a proposal for a generalization of CBPV to factor both.

∂CBPV

(We had to pick a fancy name.)

The main novelties: two for the price of one Not one, but two parallel hierarchies of universes:

v vs. c!

Not one, but two let-bindings!

t F A X

c

x A u X let x t in u X t F A x A X

c

x A u X dlet x t in u let x t in X

Justifjed by all of our syntactic models so far (and we have quite a few)

Pédrot & Tabareau (INRIA) An Explosive Ménage à Trois 13/06/2019 16 / 19

slide-49
SLIDE 49

A Generic Workaround

We have a proposal for a generalization of CBPV to factor both.

∂CBPV

(We had to pick a fancy name.)

The main novelties: two for the price of one

  • Not one, but two parallel hierarchies of universes: □v vs. □c!
  • Not one, but two let-bindings!

Γ ⊢ t : F A Γ ⊢ X : □c Γ, x : A ⊢ u : X Γ ⊢ let x := t in u : X Γ ⊢ t : F A Γ, x : A ⊢ X : □c Γ, x : A ⊢ u : X Γ ⊢ dlet x := t in u : let x := t in X

  • Justifjed by all of our syntactic models so far (and we have quite a few)

Pédrot & Tabareau (INRIA) An Explosive Ménage à Trois 13/06/2019 16 / 19

slide-50
SLIDE 50

Many More

This was a very high-level talk

Many things I did not discuss here!

  • A good notion of purity: thunkability vs. linearity
  • Complex ∂CBPV encodings
  • Presheaves as observationally pure terms of an impure CBV theory

http://pédrot.fr/articles/dcbpv.pdf

Pédrot & Tabareau (INRIA) An Explosive Ménage à Trois 13/06/2019 17 / 19

slide-51
SLIDE 51

Conclusion

  • Efgects and dependent types: choose your side.

⇝ Purity, CBN, CBV, Michael Bay?

  • Even inconsistent theories have practical interest.

Pédrot & Tabareau (INRIA) An Explosive Ménage à Trois 13/06/2019 18 / 19

slide-52
SLIDE 52

Scribitur ad narrandum, non ad probandum

Thanks for your attention.

Pédrot & Tabareau (INRIA) An Explosive Ménage à Trois 13/06/2019 19 / 19