Elena Tushkanova

Alain Giorgetti

Claude Marché

Olga Kouchnarenko

Modular Specification of Java Programs

Keywords: Programmation, vérification et preuves Équipes-Projets PROVAL Formal Specification, Verification, Proof, Automated Reasoning, SMT Provers, Krakatoa Modeling Language Spécification formelle, Vérification, Preuve, Démonstration automatique, Prouveurs SMT, Krakatoa Modeling Language

This work investigates the question of modular specification of generic Java classes and methods. The first part introduces a specification language for Java programs. In the second part the language is used to specify an array sorting algorithm by selection. The third and the fourth parts define a syntax proposal for the specification a generic Java programs, through two examples. The former is the specification of the generic method for sorting arrays which comes in the java.util.Arrays class of the Java API. The latter is the specification of the java.util.HashMap class and its use for memoization.

List of Figures

The work presented in the present report has been done in the framework of the INRIA CeProMi1 "Action de Recherche Collaborative" (ARC). One of the objectives of the ARC is modular specification and proof of properties of Java or C programs. A well conceived program is developed in a modular way, that is by the structured assembly of simpler components. The goal is also to get modularity to prove modular programs. Some members of the ARC project develop a specification language for Java programs called the Krakatoa Modeling Language (KML).

This work especially addresses the question of modular specification of the so-called generic Java classes and methods. It proposes extensions of the KML language to allow specifications of these, which essentially amount to

• add type parametricity in that specification language;

• add a notion of instantiation of theories used to model programs.

Our proposal is illustrated on two examples. The former is the specification of an algorithm to sort a Java array. The latter is the specification of the java.util.HashMap class and its use for memoization.

Existing works [START_REF] Filliâtre | Certification of Sorting Algorithms in the System Coq[END_REF][START_REF] Marché | Winter School: instruction for lab session/Krakatoa tool[END_REF] on sorting algorithm specification handle a particular instance of an array of integers. They use a permutation datatype to prove that the resulting array is a permutation of the initial array. Our suggestion is to re-use the bag datatype defined in [START_REF] Marché | Towards modular algebraic specifications for pointer programs: a case study[END_REF] to say that the initial array and the sorted array have the same content.

We go further by specifying a generic sorting algorithm, where array elements are of any type T and the ordering is given as a parameter, under the form of a comparison function on T .

This document is organized as follows. Section 2 presents the Krakatoa Modeling Language, a new specification language for Java programs. Section 3 proposes original specifications for a sorting algorithm and discusses their automatic proof. Section 4 presents new specification constructs for specifying a generic Java method for sorting arrays. Section 5 presents additional constructs needed when specifying generic hashmaps.

Specification Language

A specification language is a formal language used in computer science during requirement analysis and system design. Most programming languages are directly executable formal languages. They are used to implement a system. Specification languages are generally not directly executed. They describe the system at a much higher level than a programming language. There are many specification languages like CASL, JML, Spec#, Z, B, etc.

This section describes a specification language for the Java programming language, named Krakatoa Modeling Language (KML). KML is a new specification language for Java programs. It is designed to reduce the distance between programming and proving activities.

Why is a generic platform for program verification [START_REF] Filliâtre | The Why/Krakatoa/Caduceus platform for deductive program verification[END_REF]. From a source program annotated by definite specifications, the Why platform extracts the proof obligations and transmits them to provers like Simplify, Yices, Alt-Ergo, etc. The Krakatoa tool is a part of the Why platform. Krakatoa expects a Java source file as input, annotated with the Krakatoa Modeling Language. KML is largely inspired from the Java Modeling Language [START_REF] Burdy | An Overview of JML Tools and Applications[END_REF][START_REF] Leavens | Design by Contract with JML[END_REF]. KML specifications are given as annotations in the source code, in a special style of comments after //@ ... or between / * @ and @ * /. KML also shares many features with the ANSI/ISO C Specification Language [START_REF] Filliâtre | ACSL: ANSI/ISO C Specification Language[END_REF].

Method contracts

Method contracts are made of a precondition and a set of behaviors. The precondition is a proposition introduced by requires keyword which is supposed to hold in the pre-state of the method, i.e. when it is called. It must be checked valid by the caller.

A normal behavior has the form:

/ * @ requires R; @ behavior b: @ assigns L; @ ensures E; @ * / R and E are logical assertions, R is a precondition and E is a postcondition, L is a set of memory locations, that may be modified by the method. In E, the notation \result denotes the returned value.

An exceptional behavior as the form / * @ requires R; @ behavior b: @ assigns L; @ signals (Exc x) E; @ * /

The semantics is similar to normal behaviors, but here properties must hold when the method terminates abruptly with exception Exc.

Statement annotations

A loop annotation can be given just in front of a loop construct (while, for, etc.). It has the form / * @ loop_invariant I @ for b: loop_invariant Ib; @ loop_variant V; @ * / It states that I is an inductive invariant: it must hold at loop entry and be preserved by any iteration of the loop body. The loop invariant Ib must also be an inductive invariant. The loop variant, if given, must be an expression of integer type, which must decrease at each loop iteration, and remain non-negative.

Class invariants

A class invariant is a property attached to a class. It has the form / * @ invariant id: e; @ * / This property must be established by constructors, and preserved by each method of the class.

Logic functions and predicates

KML does not allow pure methods to be used in annotations. However, it permits to declare new logic functions and predicates. They must be placed at the global level, i.e. outside any class declaration, and are respectively of the form //@ logic m id(m1 x1, .. , mn xn) = e; //@ predicate id(m1 x1, .. , mn xn) = p; where x1, . . . , xn are variables, e must have type m, and p must be a proposition. The types m and mi can be either Java types or purely logic types: integer, real.

Logic functions and predicates can also be hybrid. It means that they depend on some memory state. More generally, they can depend on several memory states, by attaching several labels to them. A hybrid function and a predicate definition are of the following general form INRIA //@ logic m id{L1, .. , Ln}(m1 x1, .. , mn xn) = e; //@ predicate id{L1, .. , Ln}(m1 x1, .. , mn xn) = p; where L1, . . . , Ln are memory state labels on which the predicate or function depends, and m, m1, ... , mn, e, p have the same definition as presented before.

Lemmas

Lemmas are user-given propositions, a facility that might help theorem provers to establish validity of KML specifications. A lemma is declared as //@ lemma id: p; Obviously, a complete verification of a KML specification must provide a proof for each lemma.

Inductive definitions

A predicate may also be defined by an inductive definition.

/ * @ inductive P(x1, . . . , xn) { @ case c1 : p1; @ . . . @ case cn \verb : pn; @ } @ * / where c1, . . . , cn are identifiers and p1, . . . , pn are propositions. The semantics of this definition is that P is the least fixpoint of the cases, i.e. the smallest predicate (in the sense that it is false the most often) satisfying the propositions p1, . . . , pn. To ensure existence of a least fixpoint, it is required that each of these propositions is of the form \forall y1, . . . , ym, h1 ==> . . . ==> hl ==> P(t1, . . . , tn)

where P occurs only positively in hypotheses h1, . . . , hl.

Theories

Logical specifications were supported by Krakatoa/Why under the form of axiomatic blocks in Java source files within specification comments by declaring a set of types, a set of predicates and functions with expected profiles, and a set of axioms. Now it is defined in a separated file with the ".spec" extension. The syntax for defining a theory is the same as for an axiomatic block but without comments, as in the following example:

theory Th { type new_type; logic new_type func1; logic integer func2(new_type v, integer k); axiom axiom_name: axiom_body; } where Th is the theory name and axiom_body is a closed formula. Unlike inductive definitions, there is no syntactic conditions which would guarantee axiomatic definitions to be consistent. It is usually up to the user to ensure that the introduction of axioms does not lead to a logical inconsistency.

Construct \at and default logic labels

Construct \at(e,id) refers to the value of the expression e in the state of label id. There are four predefined logic labels: Pre, Here, Old and Post. \old(e) is in fact syntactic sugar for \at(e,Old).

1. The label Here is visible in all statement annotations, where it refers to the state where the annotation appears. It refers to the pre-state in a method precondition (requires clause), and to the post-state in a method postcondition (ensures clause).

2. The label Old is visible in assigns and ensures and refers to the pre-state of the method's contract.

3. The label Pre is visible in all statement annotations, and refers to the pre-state of the function it occurs in. More details could be found in [START_REF] Marché | The Krakatoa tool for Deductive Verification of Java Programs[END_REF]. This section has shortly described the Krakatoa Modeling Language. In the next section this specification language is used to prove a sorting algorithm.

Specification of a Sorting Algorithm

A sorting algorithm is an algorithm that puts elements of an array in a certain order. The resulting array must satisfy the following two properties:

1. The elements are in increasing order with respect to some ordering relation.

2. The elements in the sorted array are a permutation of the elements of the initial array.

Filliâtre and Magaud [START_REF] Filliâtre | Certification of Sorting Algorithms in the System Coq[END_REF] study several algorithms for sorting. They specify and prove them correct within the Why tool, but only on the particular instance of an array of integers and the usual "less-than" order. The first condition is specified by a predicate (sorted t i j) which expresses that array t is sorted in increasing order between the bounds i and j. The second condition is specified by a predicate (permut t tt) where t and tt are permutations of each other. They describe many ways to define such a predicate, but the best solution is to express that the set of permutations is the smallest equivalence relation containing the transpositions, i.e. exchanges of two elements. The predicate (exchange t tt i j) is defined for two arrays t and tt and two indexes i and j, and the predicate (permut t tt) is defined inductively for the following properties: reflexivity, symmetry and transitivity. The proofs are performed within the Coq proof assistant [START_REF]The Coq Proof Assistant[END_REF].

A selection sorting algorithm is written in Java by Marché [START_REF] Marché | Winter School: instruction for lab session/Krakatoa tool[END_REF] with a similar specification in KML. It is also specific to integers and the usual less-than order. The proof is done fully automatically within SMT solvers (namely Simplify and Alt-Ergo provers).

Our proposal is to re-use the bag datatype defined in [START_REF] Marché | Towards modular algebraic specifications for pointer programs: a case study[END_REF] and to rewrite the second condition by saying that the initial array and the resulting array have the same content.

This section is organized as follows: Section 3.1 presents the sorting algorithm by selection in Java, Section 3.2 presents this algorithm completed with a specification in KML. In Section 3.3 we specify the array content with a bag and try to prove the sorting algorithm automatically.

Selection sort in Java

The sorting algorithm by selection in Figure 1 is written in Java. There are two methods: swap method just exchanges two array elements of given indexes. In selectionSort method the integers i and mi are indexes for the current element and the minimal element respectively. The integer mv serves to store this minimal element. The minimal element is found in the remainder of the array and swapped with the current element.

This algorithm can be tested with different array examples, but it is not sure that it is always correct, i.e. it satisfies properties 1 and 2 for any array. A formal specification of these two properties constitutes the first step towards a formal proof of its correctness.

Sorting algorithm with a KML specification

In [START_REF] Marché | Winter School: instruction for lab session/Krakatoa tool[END_REF] two postconditions for method selectionSort are proved:

behavior sorts: ensures Sorted(t,0,t.length-1);

which means that the resulting array is in increasing order, and behavior permuts: ensures Permut{Old,Here}(t,0,t.length-1);

which means that the resulting array is a permutation of the initial array. The Sorted predicate is presented in Figure 2. It is a hybrid predicate. It means that its value depends on the memory heap in some state L. The Permut predicate presented in Figure 3 has two labels. This predicate is true whenever the slice of the array a from lower bound l to upper bound h in the state L1 is a permutation of the same slice in the state L2. The predicate defines four properties: reflexivity, symmetry, transitivity and swap. The last case tells us that swapping two elements in the slice is a permutation. The Swap predicate is reproduced in Figure 4 Figure 5 presents two loop invariants for the two loops in Figure 1. The loop invariants for the sorts behavior tell that the array is sorted up to index i in the external loop and that mv is a minimal element between a[i] and a[j] in the internal loop. The loop invariant for the permuts behavior is the same for the external and internal loops. It tells that the current array is a permutation of the initial array.

3: Inductive predicate Permut predicate Swap{L1,L2}(int a[], integer i, integer j) = \at(a[i],L1) == \at(a[j],L2) && \at(a[j],L1) == \at(a[i],L2) && \forall integer k; k != i && k != j ==> \at(a[k],L1) == \at(a[k],L2);
The algorithm with this specification is proved within the Simplify prover, except the postcondition for the selectionSort method which tells that the resulting array is a permutation of the initial array. This postcondition is proved within the Alt-Ergo prover. So, this algorithm is proved within the Simplify and the Alt-Ergo provers.

The proof results are satisfactory. However, we want to explore another way for the second property by reusing a bag datatype. More precisely, we try to prove the same algorithm but with a property 2 saying that the initial array and the resulting array have the same content.

Specifying the sorting algorithm by selection with a bag

A bag (or multiset) is a collection without order. We want to associate to each array the bag of its elements, and to express that the output array is a permutation of the input array by writing that the corresponding bags are the same. It is a new way to prove property 2.

The type of bags is described by the functions on Figure 6 and the set of first-order axioms on Figure 7 that present some properties of bags. The first four axioms tell that union is associative, commutative and that the INRIA / * @ loop_invariant 0 <= i; @ for sorts: @ loop_invariant Sorted(t,0,i) && @ (\forall integer k1 k2 ; @ 0 <= k1 < i <= k2 < t.length ==> t[k1] <= t[k2]); @ for permuts: @ loop_invariant @ Permut{Pre,Here}(t,0,t.length-1); @ * / for (i = 0; i < t.length-1; i++) { mv = t[i]; mi = i; / * @ loop_invariant @ i < j && @ i <= mi < t.length && @ mv == t[mi]; @ for sorts: @ loop_invariant @ (\forall integer k; i <= k < j ==> t[k] >= mv); @ for permuts: @ loop_invariant @ Permut{Pre,Here}(t,0,t.length-1); @ * / for (j = i + 1; j < t.length; j++) { ... } ... } 8 declares a hybrid function which takes an array, a lower and an upper bounds as parameters and returns a bag. The KML reads keyword says that boundContent just reads the array between i and j, it does not modify it. The first axiom says that boundContent returns the empty bag if the lower bound is greater than the upper bound. The second axiom says that, otherwise, the resulting bag is the union of the singleton bag containing the first array element and the content of the remaining part of the array.

It should be proved that the swap and selectionSort methods do not change the content of the slice as shown in Figure 9.

This postcondition is proved for the selectionSort method, but is not proved for the swap method. The selectionSort method depends on the swap method, therefore, it is easy to prove, but proving the swap method requires induction because boundContent is inductively defined. To prove the swap method we must guide provers step by step with assertions which are presented in Figure 10. The first assertion tells that the new

INRIA void swap(int a[], int i, int j) { int tmp = a[i]; a[i] = a[j];
/ * @ for cont: assert @ boundContent{Here}(a,0,a.length-1) == @ union(remove(\at(a[i],Pre), @ boundContent{Pre}(a,0,a.length-1)), @ singleton(\at(a[j],Pre))); @ * / / * @ for cont: assert @ a[j] == \at(a[j],Pre); @ * / Middle: { a[j] = tmp; / * @ for cont: assert @ boundContent{Here}(a,0,a.length-1) == @ union(remove(\at(a[j],Middle), @ boundContent{Middle}(a,0,a.length-1)), @ singleton(tmp)); @ * / } } Old and Here is labelled Middle. The last assertion tells that the new content is obtained from the previous content by removing the previous value of a[j] and adding the value of the local variable tmp (which is the old value of a[i]).

Moreover, the lemma presented in Figure 11 is added. It says that whenever the elements of an array are the same at two states, except in some position k, then the array content at the second state can be obtained from its content at the first state by removing the element at position k in the first state and adding the element at position k in the second state.

Table 1 presents proof obligations (POs) proved by five provers: Alt-Ergo 0.8, Simplify 1.5.4, Yices 1.0.21, Z3 2.2 and CVC3 2.1. There are nine POs: one PO for the lemma, four POs for the selectionSort method and four POs for the swap method. Since the lemma itself is not provable without induction it is proved by none of these provers. All POs are proved by the Simplify prover. Unlike Simplify the SMT solvers Alt-Ergo,Yices, Z3 and CVC3 fail to prove some of the POs.

As a conclusion, the sorting algorithm is proved for array elements with the int Java type. Nevertheless, we would like to prove this algorithm for every Java type, that is as a generic sorting algorithm. It is the matter of the next section.

Generic Sorting

Java generics are a language feature that allows definition and use of generic types and methods. Generics are needed for implementing a generic class that can be instantiated for a variety of types.

The class java.util.Arrays defines a generic sorting method with the following profile: T is the type of objects that may be compared by this comparator. The method compare compares its two arguments for order. It returns a negative integer, zero, or a positive integer when the first argument is less than, equal to, or greater than the second one.

The simple program given on Figure 12 illustrates an instance of use of this sort method. In the main method, intc is an instance of the class IntComparator (Figure 13), which implements the interface java.util.Comparator<T> instantiated with the class Integer which wraps a value of the primitive type int in an object.

The client code ends with a simple assertion which we expect to be able to prove, as a consequence of the generic specification we will provide.

In the following, we propose a set of specifications for the classes and interfaces involved in this example, in ordre to be able to prove the assertion of the main program.

Specification of Integer class

An excerpt of the Integer class of package java.lang annotated in KML is given on Figure 14. Notice that the private field is visible in the annotations of the public methods. In JML, the field should be annotated with modifier spec_public to allow that. In KML, private fields are automatically visible in annotations.

Specification of the Comparator interface

Figure 15 presents our interface Comparator where the compare method is specified with a postcondition. This postcondition is based on two predicates sto and eq. The first one means a strict total order and the second one means equality. But where are sto and eq defined? Figure 16 shows a theory named ComparatorTheory which defines these two predicates. Equality is reflexive, symmetric and transitive. The strict total order satisfies four properties: irreflexivity, antisymmetry, totality and transitivity.

Specifying the sorting behavior

Figure 17 presents the specification of the method sort which tells that the array is sorted.

The predicate sorted is defined in Figure 16. It means that the array is sorted in increasing or decreasing order. Two array elements are compared with the total order to also defined in Figure 16 from sto and eq.

From the specification of the compare method (Figure 15) provers cannot understand where sto and eq predicates are. So, these predicates have to be qualified with the theory where they are declared as shown in Figure 18.

However, when the Comparator interface is instantiated with the Integer Java type, for example, we expect the predicates to be instantiated with an instance of the ComparatorTheory. For instance, when the Comparator interface is instantiated with the Integer Java type, the eq and sto predicates can be defined as in the IntComparatorThery reproduced in Figure 19.

The Comparator interface should take some comparison theory as a parameter. We suggest to replace Figure 18 The syntax Th instantiating ComparatorTheory<U> says that Th is an instance of the general theory defined in Figure 16.

The class IntComparator shown in Figure 21 implements the instantiation of the Comparator interface where the Java type is the Integer class and the theory is the comparison theory for this class, defined in Figure 19. Now the complete sorting method specification should be as shown in Figure 22. The sorting method takes an array a and a comparator cmp as parameters. The comparator type has itself two parameters: a Java type W which is a supertype of V and a theory Th instantiating the general comparison theory ComparatorTheory. In the method postcondition the predicate sorted is qualified with this theory.

interface Comparator<U> { / * @ ensures \result == -1 <==> ComparatorTheory(U).sto(x,y) && @ \result == 0 <==> ComparatorTheory(U).eq(x,y) && @ \result == 1 <==> ComparatorTheory(U).sto(y,x); @ * / public int compare(U x, U y); }

Specifying the permutation behavior

We specify the second expected property, that the resulting array is a permutation of the original one. Following [START_REF] Marché | Winter School: instruction for lab session/Krakatoa tool[END_REF], we introduce a hybrid predicate, defined inductively on Figure 23. The new and simple extension we need is the addition of a type parameter T to denote the type of array elements.

INRIA

/ * @ behavior sorts: @ ensures th.sorted(a,0,a.length-1); @ * / public static <V> / * @ <W> <th instantiating ComparatorTheory<W> > * / void sort(V[] a, Comparator<? / * @ as W * / super V> / * @ <th> * / cmp) { } The second behavior of sort method is then given on Figure 24.

predicate Swap<T>{L1,L2}(T a[], integer i, integer j) = \at(a[i],L1) == \at(a[j],L2) && \at(a[j],L1) == \at(a[i],L2) && \forall integer k; k != i && k != j ==> \at(a[k],L1) == \at(a[k],L2); inductive Permut<T>{L1,L2}(T a[],

Verification conditions for soundness

The soundness condition for the theory IntComparatorTheory to instantiate the theory Comparator-Theory<Integer> is that the definitions of eq and sto given in IntComparatorTheory satisfy the ax-/ * @ behavior permuts: @ ensures Permut<V>{Old,Here}(a,0,a.length-1); @ * / public static <V> void sort(V[] a, Comparator<? super V> cmp); Another verification condition is generated for the implementation IntComparator (see Figure 21) of the interface Comparator<U>. The method compare defined in the IntComparator class should satisfy the specification of the method compare declared in the interface Comparator<U> when the theory parameter Th is instantiated with IntComparatorTheory. This condition is again easily proved by SMT provers (up to the question of null pointers that is not addressed here).

Generic Hashmaps

We investigate now the specification of generic hashmaps. These are data types which build finite mappings from indexes of some type key to values of some other type data. Finding the value associated to a given index is made efficient by use of classical hashing techniques.

Among the CeProMi collection of challenging examples2 , there is a simple but illustrating example of use of hashmaps: a method for computing Fibonacci numbers:

F (0) = 0, F (1)
= 1, and

F (n + 2) = F (n + 1) + F (n) for n ≥ 0.
To avoid the exponential complexity of the naive recursive algorithm, we apply the general technique of memoization. Notice that there exists other efficient ways to compute Fibonacci numbers, this example is just considered as a simple illustration of memoization techniques in general.

A Java Fib class with a fib method computing Fibonacci numbers with memoization is shown on Figure 25.

Specification of the Fibonacci sequence

A mathematical definition of the Fibonacci sequence as a theory is given on Figure 26. The expected behavior of the fib method is specified as on Figure 27. Notice that issues related to arithmetic overflow are ignored. We just assume for simplicity that computations are made on unbounded integers.

A theory for hashable objects

The first step is to define a theory which provides a predicate for testing equality, and a hash function. This theory is given on Figure 28. The essential part of this theory is the lemma hash_eq which specifies the expected property for the hash function: two equal objects must have the same hash code. We can then provide a theory for maps, as shown on Figure 29. This theory is parametrized by both a type K for the keys and a theory for equality and hashing of K objects. The type of data is not given as a parameter to This theory is indeed the classical theory of arrays which is a typical theory supported by SMT provers. It is defined by a function acc to access the element indexed by some key, and a function upd which provides a so-called functional update of a map, returning a new map in which the element associated to some key is changed. The behavior of these two functions is axiomatized by the two axioms of Figure 29, which make an essential use of the equality predicate on keys. It has to be noticed that specifying the proper equality relation on keys is one of the issues in this specification, and our proposal of use of theories is an answer to this issue.

INRIA

interface Hashable / * @ as T * / / * @ <Th instantiating HashableTheory<T> > * / { / * @ requires (o instanceof T); @ ensures \result == true <==> Th.eq(this,(T)o); @ * / boolean equals(Object o); / * @ ensures \result == Th.hash(this); @ * / int hashCode(); } / * @ requires x instanceof K; @ ensures \result != null ==> @ \result == M.acc(m,(K)x) ; @ * / V get(Object x); / * @ requires k != null; @ assigns m; @ ensures @ m == M.upd(\old(m),k,v); @ * / void put(K k, V v); } Building HashMap for type K of keys should be allowed only if K implements methods equals and hashCode in a way compatible with some theory instantiating HashableTheory<K>. To express that we introduce an interface for hashable objects as on Figure 30. The specification of the generic java.util.HashMap class is shown on Figure 31. A constraint is posed on the type of keys to relate it with a proper HashableTheory. Notice the use of local naming of a particular instance of a theory: the name M is given to the theory of Maps instantiated on the type of keys and on its theory of equality and hashing. This naming mechanism is certainly a construction that we should offer in practice.

Instantiating generic HashMaps

The generic HashMap class being specified, we can use it in the Fib class. The first step is to provide an instance of the theory of equality and hashing on Integers. This is done on Figure 32. A proper implementation of the Integer class is then given on Figure 33.

Specification of the Fib invariant

In order to prove the fib method behavior, it is mandatory to provide a class invariant which, informally, states that for any pair (x, y) stored in the memo map, y = f ib(x). The class invariant for the Fib class can be written as in Figure 34.

The verification conditions corresponding to the "instantiates" declaration amount to prove that the given definitions satisfy the axioms of reflexivity, symmetry and transitivity, which are obvious in that case; and the hash_eq axiom which is obvious too.

Hopefully, the given constructions in the specifications should allow to prove formally the expected behavior of the fib method. However, there is a final missing element that should be investigated further: the contract says that there is no side-effects at all, whereas in reality the private memo hashmap can be modified. This problem is known as the issue of hidden side-effects [START_REF] Marché | Towards modular algebraic specifications for pointer programs: a case study[END_REF].

Conclusion

We have described the specification language KML for the Java programming language. The sorting algorithm by selection is proved by using a hybrid function which takes an array as a parameter and returns a bag. A bag is a collection without order. Given an array, this function returns the bag of its elements. We have expressed that the output array is a permutation of the input array by writing that the corresponding bags are the same. / * @ invariant memo_fib: @ \forall Integer x, Long y; @ y == memo.M.acc(memo,x) && y != null ==> @ y.value == math_fib(x.value); @ * / / * @ requires n >= 0; @ assigns \nothing; @ ensures \result == math_fib(n); @ * / long fib(int n) { ... } }

Figure 34: Class invariant of the Fib class

The works in [START_REF] Filliâtre | Certification of Sorting Algorithms in the System Coq[END_REF] and [START_REF] Marché | Winter School: instruction for lab session/Krakatoa tool[END_REF] suggest to define an inductive predicate to axiomatize the property that the output array is a permutation of the input array. Specifying with bags is another way to prove this property. But this new way of specifying a sorting algorithm leads to some difficulties. For instance, the swap method cannot be proved automatically without additional assertions and lemma which itself is unprovable without induction. These assertions are required by provers to succeed their proofs.

During this work the support of theories and its definition were implemented within the WHY platform. The theories are defined in a separated file with the ".spec" extension. The syntax for defining a theory is the same as the one for an axiomatic block, but without comments.

We explained that in order to formally specify generic methods and classes, it is necessary to extend existing notion of theories in specification languages like KML. It is not only mandatory to add type parametricity in theories, but also to provide a notion of parametricity of theories and a corresponding notion of theory instantiation.

The extensions we propose are essentially inspired by existing notion of languages implementing higher-order logic, namely the notion of modules and functors as they exist for example in Coq, or the notion of type classes [START_REF] Sozeau | First-Class Type Classes[END_REF].

This is an on-going work and it clearly remains to formalize the proposed constructions, to express what are the necessary proof obligations in general, and to show a soundness result. Also, a relation must be established between our approach and similar approaches based on refinement techniques [START_REF] Tafat | A refinement methodology for object-oriented programs[END_REF].

Another future work is to apply a similar approach to the formal specification of C programs. We plan to propose similar constructs for extending the ACSL language [START_REF] Filliâtre | ACSL: ANSI/ISO C Specification Language[END_REF]. An issue is that C type system is even weaker than Java generics, for example the qsort() function in the C standard library is made generic via the use of void pointers, and function pointer to pass the comparison function as argument. void * plays the same role as the ? in Java, which means that the annotation language will need to annotate each occurrence of void * by a regular type variable.

1

  Selection sort in Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Specification of the first property . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Inductive predicate Permut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Predicate Swap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Loop invariants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 Signature for bags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 Algebraic specification of bags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 Hybrid function for array content . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 Postcondition for selectionSort and swap methods . . . . . . . . . . . . . . . . . . . . . . 10 Assertions to guide provers step by step . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 New lemma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Main class where the sorting method is called . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 IntComparator class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Annotated Integer class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Specification of the Comparator interface, first version . . . . . . . . . . . . . . . . . . . . . . 16 General theory for Comparators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17Specification of the generic sorting method, first version . . . . . . . . . . . . . . . . . . . . . . 18 Specification of Comparator interface, second version . . . . . . . . . . . . . . . . . . . . . . 19 Theory for Integer comparison . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 Specification of Comparator interface, final version . . . . . . . . . . . . . . . . . . . . . . . 21 Specification of the IntComparator class . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 Specification of the generic sorting method, final version . . . . . . . . . . . . . . . . . . . . . . 23 Permutation predicate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 Permutation behavior of Arrays.sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 Java source for Fibonacci sequence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 Theory for the Fibonacci sequence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 Specification of the fib method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 Theory for hashable objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 Theory of maps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 Interface for Hashable objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 Specification of the HashMap class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 Theory of equality and hashing of Integers . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 Implementation of hashable Integers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 Class invariant of the Fib class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . INRIA 1 Introduction

  INRIA

1

 1

Figure 2 :

 2 Figure 2: Specification of the first property

Figure

  Figure 3: Inductive predicate Permut

Figure 4 :

 4 Figure 4: Predicate Swap

Figure 5 :

 5 Figure 5: Loop invariants

Figure 6 :

 6 Figure 6: Signature for bags

  axiom union_assoc: \forall ibag b1 b2 b3; union(union(b1,b2),b3) == union(b1,union(b2,b3)); axiom union_comm: \forall ibag b1 b2; union(b1,b2) == union(b2,b1); axiom union_empty_id_left: \forall ibag b; union(empty_bag(),b) == b; axiom union_empty_id_right: \forall ibag b; union(b,empty_bag()) == b; axiom remove_union: \forall ibag b, integer x; remove(x,union(singleton(x),b)) == b;

Figure 7 :

 7 Figure 7: Algebraic specification of bags

Figure 8 :

 8 Figure 8: Hybrid function for array content

Figure 9 :

 9 Figure 9: Postcondition for selectionSort and swap methods

Figure 10 :

 10 Figure 10: Assertions to guide provers step by step

Figure 12 :

 12 Figure 12: Main class where the sorting method is called

Figure 14 :Figure 15 :

 1415 Figure 14: Annotated Integer class

Figure 16 :Figure 17 :

 1617 Figure 16: General theory for Comparators

Figure 18 :Figure 19 :Figure 21 :

 181921 Figure 18: Specification of Comparator interface, second version

Figure 22 :

 22 Figure 22: Specification of the generic sorting method, final version

Figure 24 :

 24 Figure 24: Permutation behavior of Arrays.sort

theoryFigure 28 :Figure 29 :

 2829 Figure 28: Theory for hashable objects

Figure 30 :

 30 Figure 30: Interface for Hashable objects

Figure 31 :

 31 Figure 31: Specification of the HashMap class

INRIA

  class Fib { HashMap<Integer,Long> / * @ <HashableInteger> * / memo;

  . Swap{L1,L2}(a,i,j) is true if and only if the value of a[i] in the state of label L2 equals the

	inductive Permut{L1,L2}(int a[], integer l, integer h) {
	case Permut_refl{L}:
	\forall int a[], integer l h; Permut{L,L}(a, l, h) ;
	case Permut_sym{L1,L2}:
	\forall int a[], integer l h;
	Permut{L1,L2}(a, l, h) ==> Permut{L2,L1}(a, l, h) ;
	case Permut_trans{L1,L2,L3}:
	\forall int a[], integer l h;
	Permut{L1,L2}(a, l, h) && Permut{L2,L3}(a, l, h) ==>
	Permut{L1,L3}(a, l, h) ;
	case Permut_swap{L1,L2}:
	\forall int a[], integer l h i j;
	l <= i <= h && l <= j <= h &&
	Swap{L1,L2}(a, i, j) ==> Permut{L1,L2}(a, l, h) ;
	}

  with Figure20. Now, the Comparator interface has two parameters: a Java type U and a theory Th.

	theory ComparatorTheory<T> {
	predicate eq{L}(T x, T y);
	axiom eq_ref{L}:
	\forall T a; eq{L}(a,a);
	axiom eq_sym{L}:
	\forall T a b; eq{L}(a, b)
	<==> eq{L}(b,a);
	axiom eq_trans{L}:
	\forall T a1 a2 a3; eq{L}(a1, a2) &&
	eq{L}(a2,a3) ==> eq{L}(a1,a3);
	predicate sto{L}(T x, T y);
	axiom sto_irref{L}:
	\forall T a; ! sto{L}(a,a);
	axiom sto_antisym{L}:
	\forall T a1 a2; ! (sto{L}(a1,a2) && sto{L}(a2,a1))
	axiom sto_totality{L}:
	\forall T a1 a2; eq{L}(a1,a2) || sto{L}(a1,a2) ||
	sto{L}(a2,a1);
	axiom sto_trans{L}:
	\forall T a1 a2 a3; sto{L}(a1,a2) &&
	sto{L}(a2,a3) ==> sto{L}(a1,a3);
	INRIA

predicate to{L}(T x, T y) = eq{L}(x,y) || sto{L}(x,y); predicate sorted{L}(T[] a, integer l, integer h) = \forall integer i; l <= i <h ==> to{L}(a[i],a[i+1]); }

RR n°7097

http://www.lri.fr/cepromi RR n°7097

http://www.lri.fr/cepromi INRIA

Acknowledgments

We would like to thank Christine Paulin, Andriy Paskevych, Wendi Urribarri, Asma Tafat, Romain Bardou and Johannes Kanig for helpful discussions and suggestions.

This work was partly supported by the INRIA National Action "CeProMi", http://www.lri.fr/cepromi/, and by the ANR National Project "CAT" (ANR-05-RNTL-0030x).

Spécification modulaire de programmes Java

In this method, <T> is a type parameter and the syntax <? super T> denotes an unknown type that is a supertype of T (or T itself). Notice that the java.util.Comparator<T> interface imposes a total ordering on some collection of objects. / * @ requires n >= 0; @ assigns \nothing; @ ensures \result == math_fib(n); @ * / long fib(int n);

Figure 27: Specification of the fib method the theory itself, but as a parameter V of the type of maps. This allows using the same theory of maps for several instances of V.


Dr Véronique Lefebvre
email: veronique.lefebvre-des-noettes@aphp.fr

Des Noëttes

Retours d'expériences et médecine narrative : écouter pour mieux soigner

Keywords: Médecine narrative, empathie, écrits, écoute attentive, récits, arts Narrative medicine, empathy, writings, attentive listening, stories, arts

La médecine est un art mais dont l'enseignement et les technosciences tendent à déshumaniser les pratiques soignantes. Nous montrerons, par des retours d'expériences comment la médecine narrative peut, à l'écoute attentive et empathique de l'autre, améliorer la relation médecin-malade.

Introduction

La santé et la maladie, c'est chose personnelle. Les médecins l'ont oublié.

Jacques Chardonne (1961) 1Depuis les années 80 avec un numérus clausus sélectionnant drastiquement les futurs médecins, sur les sciences dites dures, par un concours qui laisse sur le bord du chemin 80 % des aspirants docteurs, on déplore, malgré ou à cause des progrès incessants de la médecine technique une deshumanisation du soin. Celle-ci se traduit par une perte de l'empathie et du sens du soin avec parfois des situations de détresses psychiques chez les externes et les internes ainsi qu'une insatisfaction croissante chez les patients qui ne se sentent ni écoutés ni entendus. Il est urgent d'apporter un supplément d'âme aux uns et aux autres afin de replacer l'humain au coeur du soin. Or nous avons besoin de mots pour dire nos maux, mais il faudrait du temps, une oreille attentive et formée pour les accueillir, en être ému sans en être débordé et les interpréter. Psychiatre et philosophe, impliquée depuis 10 ans dans l'enseignement d'une pédagogie humaniste auprès des jeunes externes, nous proposerons de comprendre d'où vient cette perte d'empathie chez les jeunes médecins, puis ce que la médecine narrative peut concrètement apporter par des témoignages de retours d'expériences. Il s'agit d'une méthode au tant que methodos, montrant un chemin qui permet de voir et de retrouver du sens, en partant de l'expertise-expérientielle de Rita Charon, mais en la contextualisant et en l'ouvrant à d'autres approches artistiques afin de ré-humaniser le soin et d'accrocher une oreille attentive au bout du stéthoscope.

Éviter la fabrique d'instruits incultes

« Chef, on ne comprend pas pourquoi cette dame à les CRP (protéine C réactive est une protéine qui apparaît dans le sang lors d'une inflammation aiguë.) au plafond ! Mais vous l'avez examinée demande le chef de clinique ? Non réponds l'externe, mais je viens de recevoir son bilan biologique. » Le chef soulève de draps et aperçois sous le corps cachectique de cette vieille femme de 92 ans des escarres suintants.

Le médecin d'aujourd'hui est pris en tension entre deux exigences : il doit objectiver les plaintes, douleurs et autres symptômes, donc rendre observable et mesurable ce qui ne va pas en neutralisant la subjectivité « gênante » du malade et en même temps, il ne doit pas objectaliser son patient, mais bien le rendre sujet de ses soins et de sa propre singularité narrative et non pas objet des soins médicaux. Or il y a deux postures du médecin : le Docteur, celui qui sait, qui est plutôt dans une position surplombante et fermée, et le Médecin celui qui « médie » son savoir, ses compétences acquises, son expérience des maladies mais surtout de la personne malade, celui qui prend du temps pour écouter, entendre et rendre hommage aux histoires des malades traversés par des maladies [START_REF] Charon | Narrative Medecine: Honoring the stories of illness[END_REF].

Cette tension est reprise par Michel Serres

L'enfer est en troisième année

Après un concours très difficile et sélectionnant sur des connaissances surtout théoriques et désincarnées, les étudiants sont animés d'idéalisme, d'enthousiasme, et s'engagent souvent par vocation dans l'intention d'aider l'autre souffrant [START_REF] Kay | Traumatic deidealization and future of medicine[END_REF]& Sylver, 1990). Dans l'étude de Hojat [START_REF] Hojat | The devil is in the third year: a longitudinal study of erosion of empathy in medical school[END_REF] nommée « L'enfer est en 3 e année : diminution de l'empathie en faculté de médecine », les analyses statistiques ont montré que les scores d'empathie n'ont pas changé significativement au cours des deux premières années en faculté de médecine, mais qu'une baisse significative des scores d'empathie a été observée à la fin de la troisième année, et ceci jusqu'à l'obtention du diplôme. Il est questionnant de constater que c'est à la période où les étudiants sont enfin pour la première fois en contact et en activité pratique avec leurs patients, donc au moment où l'empathie est essentielle, que celle-ci diminue [START_REF] Hojat | An empirical study of decline in empathy in medical school[END_REF]. Un recul de l'empathie émerge au cours de leur formation, malgré l'engagement des facultés de médecine et les intentions initiales des étudiants [START_REF] Tm | A retrospective study of attitude change during medical education[END_REF]. La médecine étant au coeur des souffrances humaines, plusieurs facultés de médecine se sont mobilisées pour offrir des formations soit obligatoires, soit en options aux relations médecins/malades. Plusieurs hypothèses ont été avancées pour expliquer ce déclin de l'empathie comme une certaine maltraitance à l'égard des étudiants, le stress continu, la médecine technologique. En effet, dans une enquête portant sur l'incidence, la gravité et l'importance de la violence faites aux étudiants, 46,4% des étudiants ont déclaré avoir été maltraités à un moment de leurs études de médecine, dont 80,6% par leur supérieur hiérarchique. Pour 69,1% d'entre eux, cet épisode a été bouleversant, en affectant négativement leur pratique dans 49,6% des cas, dont 16,2 % d'entre eux disent que cet épisode les affectera toujours (Sylver, 1990). Le stress majeur chez les étudiants en médecine doit être une cause importante à prendre en considération dans la baisse de l'empathie. Ce changement a été qualifié de « dés-idéalisation traumatique » [START_REF] Kay | Traumatic deidealization and future of medicine[END_REF]. Une autre cause retrouvée à la baisse de l'empathie est la pratique d'une spécialité technologique. En effet, ceux qui poursuivaient des carrières technologiques (Biologie, radiologie...), avaient une baisse de l'empathie plus importante que leurs homologues dans les spécialités cliniques. Ces résultats ont été mis en évidence lors d'une étude longitudinale. Comme le suggère l'étude de Hojat [START_REF] Hojat | An empirical study of decline in empathy in medical school[END_REF][START_REF] Hojat | The devil is in the third year: a longitudinal study of erosion of empathy in medical school[END_REF], la diminution de l'empathie en faculté de médecine peut être attribuée à plusieurs facteurs, y compris le manque de modèles (chez leurs supérieurs hiérarchiques) (Skeff, 1998), un volume élevé d'éléments à apprendre, la pression du temps, les facteurs liés au patient et le manque de sommeil (Killgore, 2008). De plus, la dépendance excessive des étudiants à l'égard des technologies diagnostiques et thérapeutiques limite leur vision de l'importance des interactions humaines dans les rencontres avec les patients [START_REF] Hojat | An empirical study of decline in empathy in medical school[END_REF]. Un autre point est un enseignement de la médecine qui mise sur la distance à adopter avec le patient, la distance affective, le détachement émotionnel, et au profit de la science et de la technique.

Alors comment former nos jeunes médecins, non seulement aux nouvelles technosciences mais aussi aux humanités médicales afin de retrouver le sens du soin et l'espoir d'être heureux dans l'exercice de leur art et donc de mieux prendre en charge nos patients ? Comment résister aux pressions économiques, à l'efficience à l'Hôpital à l'accumulation croissante de tâches administratives qui, faute de temps détournent les médecins de leurs missions première : écouter l'autre souffrant ? La médecine narrative pourrait être une solution efficace et facilement accessible à tous les étudiants en médecine, soignants et patients.

Qu'est-ce que la médecine narrative ?

La médecine narrative est une discipline née aux Etats Unis, sous l'impulsion du Pr. Rita Charon [START_REF] Charon | Narrative Medecine: Honoring the stories of illness[END_REF][START_REF] Charon | Médecine narrative, rendre hommage aux histoires de maladies[END_REF][START_REF] Charon | The principles and practice of narrative medicine[END_REF], médecin interniste, dont le premier objectif est d'établir une relation médecin-malade de qualité marquée par l'empathie et basée sur l'écoute attentive du patient, et dont le deuxième objectif est d'aider les soignants à réfléchir sur leur métier dont l'exercice leur fait côtoyer quotidiennement la souffrance et la mort. Son originalité est d'avoir adapté à la pratique clinique des techniques utilisées par les littéraires pour analyser et produire des récits : la narratologieétude des structures narratives des textes littéraires ou autres formes de récits -mise au service de l'analyse du discours du patient, enrichit la capacité d'écoute et de compréhension des histoires des patients par les médecins et renforce l'alliance thérapeutique ; l'écriture réflexive, un mode d'écriture plus personnelle que d'autres modes d'écriture, permet aux praticiens, aux étudiants et aussi aux malades de prendre conscience de leur ressenti, par l'écriture de récits de ce qu'ils vivent dans leur expérience partagée de la maladie.

Pour Rita Charon [START_REF] Charon | Narrative Medecine: Honoring the stories of illness[END_REF], la première de ces compétences est la capacité de reconnaître qu'au-delà du besoin d'énoncer les symptômes qui motivent sa demande de soins, le patient a besoin de raconter une histoire, l'histoire qu'il a construite pour donner du sens à ce qui lui arrive, l'histoire qui lui permet de donner une explication au bouleversement de sa trajectoire de vie par la survenue brutale des signes de sa maladie, ou par leur apparition progressive, sources d'angoisse dans les deux cas.

Ensuite absorber cette histoire, c'est la capacité du clinicien d'offrir au patient un espace pour accueillir son récit ; cette compétence, qui contredit la recommandation habituelle de garder une distance professionnelle (bien entendu se prémunir contre le risque d'épuisement ou de burn-out reste une injonction pertinente pour que le clinicien ne se mette pas en danger), est une manière de dénoncer que cette recommandation peut aboutir parfois à des attitudes autoritaires qui produisent chez les patients le sentiment d'être ignorés, voire abandonnés ; Puis, interpréter une histoire, c'est la capacité de garder ouvertes des interprétations possibles, souvent contradictoires ou ambigües -sans d'ailleurs que le patient lui-même soit au clair avec la signification de l'histoire qu'il a construite -jusqu'à ce que des informations ou recoupements ultérieurs apportent un nouvel éclairage ; Enfin, être ému par l'histoire de la maladie est une compétence que le clinicien peut acquérir, si on ne confond pas l'empathie qui, selon Decety [START_REF] Decety | Mécanismes neurophysiologiques impliqués dans l'empathie et la sympathie[END_REF], correspond à un mécanisme cognitif (le clinicien imagine la souffrance du patient), et la sympathie (il souffre avec le patient). La pratique de la médecine narrative suppose donc l'apprentissage d'une compétence qui s'acquiert par deux techniques : la lecture attentive et l'écriture réflexive et aujourd'hui la sensibilisation à la culture et l'art pictural.

C'est l'apprentissage de l'écoute du patient qui est au coeur de la médecine narrative. Comme l'exprime le titre du livre de Rita Charon Narrative Medicine : honoring the stories of illness , la médecine narrative est la capacité de rendre hommage à la maladie [START_REF] Charon | Narrative Medecine: Honoring the stories of illness[END_REF][START_REF] Charon | Médecine narrative, rendre hommage aux histoires de maladies[END_REF].

Aussi quand on dit à un interlocuteur non médecin ou non soignant que la médecine narrative, enseigne aux étudiants l'écoute du patient, la réaction est unanimement incrédule : « Mais n'est-elle pas enseignée depuis toujours ? » Quant aux réactions des médecins ou soignants, elles offrent un large spectre en fonction de leurs pratiques. Celles des professionnels appartenant à des spécialités à prédominance technique comme la chirurgie varient entre le scepticisme et l'agacement : « Oui, les histoires de patients, il faut les écouter… mais l'important est de poser les bonnes questions pour avoir les bonnes réponses ! ».

Savoir écouter l'autre souffrant

S'adresser à un sujet, à une personne, par une attitude d'écoute empathique, accéder à sa souffrance, quelle qu'elle soit, par l'analyse de son récit, faire de cette démarche un geste éthique étayant l'humanité de la relation de soin, tels sont les points que la médecine narrative permet d'acquérir. La rencontre médecin-malade est bien fondée sur une relation entre sujets autonomes, issues de deux mondes différents que tout sépare, l'un, le malade vient avec une plainte que l'autre, le médecin doit savoir entendre, diagnostiquer, évaluer et traiter, mais ces deux personnes sont traversées par la même vulnérabilité qu'est celle de notre finitude.

Cette connaissance de l'autre s'effectue par le prisme des émotions partagées, et plus particulièrement de leur perception extérieure et corporelle : un visage fermé me laisse deviner ou ressentir une possible préoccupation anxieuse. Mais ce sentiment ne se mélange pas au mien, je suis capable de le distinguer de ce que je ressens moi-même. On parle donc bien de saisir les vécus d'autrui tels que lui-même les a vécus, et non en les réduisant à son propre champ de conscience. L'empathie (Decety, 1999) Écoutons-car les témoignages écrits sont lus au petit groupe de 9 étudiants que j'animais-, ces jeunes externes 4 ème année de médecine (DFASM1) que j'ai accompagnée lors des TD (travaux dirigés) pendant près de 10 ans, en médecine narrative (que ce soit à Paris Descartes ou à l'UPEC).

Emma 6

ans

Il y a une dizaine de jours, je me suis échappée à la campagne, dans ce qui est une toute autre histoire. Il se trouve que, dans le train du retour, un TER (train express régional) presque propre et presque étouffant tant il était rempli de vacanciers suants et anonymes, je me suis trouvée assise en face d'une dame. Une dame nerveuse, petite en surpoids, avec de petites lunettes et une branche cassée. Dans ce salon de thé ou ce box de consultation improvisé, cette dame, appelons-là Josiane, s'est livrée sans relâche et sans besoin d'insister pour qu'elle parle. Elle m'a raconté son cancer et toutes les phases de son traitement : radiothérapie, reconstruction, rééducation du périnée même. Elle m'a décrit sa peau brulée et l'indifférence, ou la compétence ou les deux des divers médecins qui ont tenu son dossier, et son sort, entre leurs mains. Josiane m'a tout dit, dans le silence bruyant du wagon. Parce qu'elle avait su que j'étudiais la médecine et surtout parce qu'elle n'avait personne à qui le dire. Et j'ai pensé à la vidéo de la consultation de gériatrie, j'ai pensé à nos groupes de TD, et nos histoires et les embryons de réflexions qui en sont nés. Je me suis demandée comment j'aurais réagis si je l'avais vue dans mon cabinet pour une douleur de hanche un peu fabriquée, ou une peur qui en masque tant d'autres. J'espère que je l'aurais écoutée, entendue vraiment. Ces moments si particuliers pour le soignant comme pour le malade sont en soi thérapeutiques car « vrais ». La personne se sent reconnue, portée, vivante jusqu'au bout et parfois capable de nouveaux choix dans sa vie.

L'inexpérience ne connaît ni la tranquillité d'âme, ni la

Conclusion

Retrouver le sens du soin, par l'écoute attentive et empathique, redonner aux jeunes médecins l'espoir d'être heureux dans l'exercice de leur art, grâce à la médecine narrative permet une éthique du soin qui ne rejette pas la médecine objectivante par les examens complémentaires et les interfaces numériques, mais qui en même temps, intègre la subjectivité du malade, le récit de sa plainte telle qu'il la vit, dans son histoire personnelle. C'est une éthique qui s'apprend et qui nécessite aussi de véritables qualités morales de la part des soignants, et non pas seulement des dispositions psychologiques : vigilance et compétences, mais aussi une disponibilité à l'expression des besoins d'autrui, une intelligence sensible permettant de s'ouvrir à l'autre, dans sa fragilité et son altération, de manière empathique et imaginative. Cette éthique du souci de l'autre (Gilligan,1982(Gilligan, , trad. 2008) ) Ces qualités s'apprennent et se cultivent au sein d'une organisation de soins qui fait place à la réflexion éthique ; elles s'ancrent alors dans l'exercice même du métier de soins. Alors le récit prend-il lui-même une dimension éthique, car il est la traduction littéraire des émotions, jugements, désirs, valeurs, qui animent la relation intersubjective.

Références bibliographiques

  2 lors d' une conférence en 2006 (Serres, 2006) : « Les médecins doivent développer et entretenir parallèlement deux têtes : l'une, scientifique (une médecine fondée sur les preuves), l'autre empirique (un savoir expérientiel). Cette exigence résulte, nous dit-il « de la nécessité de solliciter à la fois la raison et l'expérience, d'appréhender tout autant le général et le particulier, la notion stable et la mouvance de la singularité, la maladie et la personne souffrante ». L'académicien et philosophe va aussi proposer des pistes pour atteindre cette personne singulière que je trouve en face de moi, vulnérabilisée par sa maladie. « Pour atteindre le singulier, l'apprentissage de la médecine doit s'appuyer aussi sur la culture, telle qu'y contribuent par exemple les grands écrivains et que l'on retrouve dans les textes de portée universelle, car ces auteurs explorent et décrivent des expériences individuelles telles que les rencontrera le médecin et qu'assurément il manquera si, limité à la raison brute, il reste un instruit inculte » Or la médecine est un art, dont l'exercice aujourd'hui peut être source de perte de sensentendu à la fois comme direction, signification et sensorialité-et de souffrance au travail pour les jeunes médecins, comme le dénonce Jean-Baptiste Bonnet, président de l'ISNI (l'Intersyndicale nationale des internes) « Nous avons perdu l'espoir d'être heureux dans notre rôle de soignant » alerte-t-il le 5 février 2018 dans une lettre ouverte à la ministre de la santé d'alors Agnès Buzin… « Le bien-être dans notre exercice n'est pas qu'un droit, c'est un devoir. Car il n'est pas concevable de prendre soin des autres sans être soi-même en bonne santé physique et psychique. » D'où vient ce mal-être ? Comment en est-on arrivé là ? Comment y palier.

  , pour le soignant et l'aidant, outre la capacité d'être affecté par ce que ressent autrui, est aussi un effort pour entendre les affects et les représentations du patient, une attention et une disponibilité à sa souffrance ainsi qu'à ses questionnements. Il s'agit de recevoir et de comprendre son point de vue, de le reformuler, de mettre des mots sur son émotion, d'assouplir sa propre subjectivité, de ne pas se cabrer sur des certitudes, de savoir s'effacer par rapport à ce que dit le patient. C'est finalement la capacité d'entendre la parole (ou les signes non verbaux qui représentent 80% d'une communication) de l'autre et d'admettre qu'elle peut différer de la sienne et qu'un dialogue entre niveaux différents de conscience est possible.Cette dimension de la conscience attentionnelle, avant même d'être intentionnelle, possède une résonance éthique intrinsèque, liée à l'expérience de l'altérité, puisqu'il s'agit d'être non seulement attentif, mais aussi affecté (sans être débordé par ses affects) et attentionné face à l'autre. On reconnait ici les compétences de la médecine narrative : savoir écouter, absorber, interpréter et être ému par le récit des patients.Pour que le malade ne soit pas réduit à sa maladie, pour que sa singularité historique expulse le symptôme hors du champ de la neutralité organique, pour qu'elle soit reçue en tant que telle par le soignant, il faut que puisse s'instaurer entre médecin et malade un espace de liberté, liberté que chacun donne à l'autre d'accéder à son être dans un élan empathique afin que nul ne soit réifié, objectalité. Mais l'écoute empathique, la rencontre avec l'alter ego, le refus de l'objectivation, nécessaires à la relation de soin, ne peuvent cependant suffire à la résumer. Il faut aussi accéder à l'histoire d'une vie, à la compréhension de l'identité de ce sujet maintenant malade, de ce personnage qui ne résume pas à sa maladie. Savoir interpréter un récit puis accéder à la reconnaissance de l'identité d'un personnage grâce à la narration, ces deux étapes sont au coeur de la médecine narrative.De l'evidence based medecine à l'evidence narrative medecineLa mise en récit devrait donc permettre au patient de conforter son estime de soi, mais aussi au médecin d'accéder à une meilleure compréhension de la maladie de son patient, à travers son histoire racontée.Ces trois piliers de la médecine narrative : intersubjectivité, écoute empathique, accession à l'identité par le récit d'une histoire, fondent une éthique permanente du soin. La médecine moderne est devenue d'une efficacité impressionnante pour guérir ou traiter nombre d'affections aiguës ou chroniques. C'est une médecine technoscientifique, analytique, qui découpe et analyse le corps et les organes dans leur fonctionnement et leurs dysfonctionnements, qui cherche à tout connaître, s'attache à trouver des lois universelles, est Selon Stepien et Baernstein, l'immersion au niveau émotionnel de la maladie permettrait aux étudiants de développer leur capacité à adopter le point de vue du patient (Stepien & Baernstein, 2006). Nous voyons comment d'autres méthodes pédagogiques permettent également cet apprentissage expérientiel. Sont utilisés des tutorats actifs avec des petits groupes de discussion, des analyses de vidéo de consultations (réelles ou simulées), des jeux de rôle y compris avec des patients volontaires. Il peut s'agir aussi de l'expérience d'une hospitalisation par les étudiants (Wilke, 2003). Enfin, des études de la littérature, de l'art (théâtre, narration, lecture de fiction, films etc.) et des travaux d'écriture sont également proposés (Batt-Rawden et al., 2013 4 & Hojat et al., 2009). « Adopter implicitement (ou explicitement comme dans la lecture d'un roman) le point de vue d'une autre personne peut aussi faciliter le recouvrement partiel des représentations cognitives et des activations neuronales sous-tendant ses représentations entre soi et l'autre » 5 (Decety, 2016). Hojat et ses collaborateurs rappellent également que des études ont montré qu'une lecture non médicale pouvait augmenter les processus mentaux qui créent l'imagination et l'interprétation par lesquels une compréhension empathique peut être renforcée (Hojat et al., 2003). Ces aspects et les données retrouvées dans la littérature suggèrent qu'une partie centrée sur les arts créatifs (comme l'écriture, la lecture, le théâtre ou autre) pourrait probablement améliorer notre module de formation à l'empathie des étudiants. C'est ainsi qu'à Paris Descartes, puis à l'UPEC, nous proposons la lecture d'Une mort très douce, de Simone de Beauvoir (Beauvoir, 1964) , ou de Léon Tolstoï (Tolstoï, 1886, trad. Imbert, 2005) La mort d'Ivan Ilitch ou de John Berger (Berger, 1967 trad. 2005) Un métier idéal : Histoire d'un médecin de campagne, avec aussi la possibilité d'aller au théâtre, de diffuser des films (Barberousse (Kurosawa, 1965), Mar adentro (Amenábar, 2004) en laissant aux étudiants le choix de proposer et d'argumenter par écrit une fin aux films, ou encore, l'organisation de débats éthiques autour de la Loi Clayes Léonetti ( Clayes-Léonetti, 2016), du suicide assisté ou de l'euthanasie, ou enfin, la confrontation à des oeuvres d'arts picturales ou musicales . Ré-humaniser le prendre-soin Pour François Goupy (Goupy 2017), pionnier en France de cette révolution pédagogique, la médecine narrative, pourrait faire penser à une vaine entreprise de réhumanisation des soins, souhaitée par des médecins et des soignants nostalgiques, attachés à un modèle d'organisation des soins révolu, si par ailleurs l'importance du facteur humain dans l'efficience des systèmes de santé n'était pas rappelée aujourd'hui par les institutions de Santé Publique et par l'Organisation Mondiale de la Santé (OMS). En France, un enseignement de la Médecine Narrative à la Faculté de Médecine Paris Descartes créé en 2009 sous la forme d'un enseignement optionnel proposé aux étudiants de quatrième année (DFASM1 : Diplôme de formation approfondie en Sciences Médicale 1e année), a été rendu obligatoire dans le cadre d'une expérience pédagogique qui est conduite depuis 2012. L'expérience conduite à Paris Descartes a montré le témoignage de l'enthousiasme que près de deux mille étudiants dans leur très grande majorité, vingt patients-acteurs et une équipe enseignante de cinquante médecins ont partagé pendant huit années, en vivant la première expérience pédagogique de Médecine Narrative dans le contexte français. En voici des témoignages de retours d'expérience. D'une expérience l'autre Explorons les savoirs expérientiels en partant des expériences vécues et narrées dans nos ateliers d'écriture de médecine narrative. Je distinguerais, avoir l'expérience « de » … ma maladie, de l'hôpital, des réactions des soignants, d'avoir une bonne ou une mauvaise expérience de telle ou telle attitude, et le fait d'être expérimenté en... médecine, en psychiatrie ou en diabétologie…pour in fine convoquer tous ces savoirs expérientiels afin d'aborder en partant de mon monde, celui des patients mais aussi leurs arrière-mondes (Nietzsche, 1883-85, trad. 2002), et de leurs part de mystère, de nos épaisseurs et de nos vulnérabilités croisées puisqu' humains nous sommes.

  gaîté du coeur. (Hippocrate, IV -IVe s. av. J.-C.) Damien 22 ansDurant cette année, et notamment lors du premier trimestre, lorsque j'étais en stage en réanimation médicale, il m'est arrivé régulièrement de me retrouver face à des personnes soit dont je ne comprenais pas la situation, soit auxquelles je ne savais pas comment être ou me comporter. Lorsque les cours et TD de médecine narrative ont commencé, certaines de ces expériences me sont revenues à l'esprit. La première d'entre elles correspondait à ma toute première patiente en réanimation, une femme dans le coma après un AVC (accident vasculaire cérébral) ; tout le monde était d'accord pour la débrancher du respirateur, sauf la famille. J'étais un peu perdu dans ce contexte car moi-même je ne comprenais pas encore bien dans quelles circonstances il était possible de débrancher une personne et l'opposition de la famille me laissait perplexe, cette femme était prêtre dans sa communauté et tous croyaient au miracle en pensant qu'elle allait se réveiller. La situation fut difficile à gérer pour les médecins mais il me semblait que de chaque côté (de la famille comme des médecins) que chacun restait planté sur ses positions sans jamais réellement prendre en compte l'autre, ce qui, peut-être aurait permis de débloquer la situation plus facilement.Un autre exemple est celui d'une femme qui a été emmenée en réanimation, consciente et bien éveillée mais qui était en phase terminale de cancer. Le médecin lui a annoncé, a appelé sa soeur (qui n'a pas eu le temps de venir avant son décès) puis lui et l'interne l'ont laissée seule dans son désarroi. Je sentais qu'ils étaient gênés par la situation et moi, ne les voyant rien faire, je me suis trouvée stupide. Je n'avais aucune idée de ce que j'aurais pu faire et puis j'avais d'autres patients à voir. Elle est morte 2 heures plus tard. Je m'en suis voulu, personne ne devrait mourir seul, si cela devait se reproduire je le ferais différemment. A contrario, un jour, je me suis occupée d'un patient avec des antécédents de maladie remplissant une page entière mais qui était très ouvert à la discussion et ne semblait pas perturbé par le fait d'être là. Je me suis rendu compte lorsque l'on discutait qu'il lui manquait deux phalanges à la main. Je ne lui ai rien demandé et je suis allé voir ses antécédents, rien n'était écrit. Mais je voulais savoir, et je suis retourné le voir, il m'a alors expliqué comment ça s'était passé tout en me racontant sa vie. Cet homme est mort dans la nuit, je l'ai appris le lendemain, mais je n'étais pas triste, il m'avait raconté son histoire et je savais qu'il était mort sans regret et serein, c'était le plus important. Il faut savoir écouter ses patients et parfois vivre les choses avec eux, c'est important et d'autant plus dans un service de réanimation, je trouve, où, vivants, morts, et personnes en extrêmes souffrances sont réunies. La médecine narrative m'a conforté dans cette idée qui n'est pas celle qui est relayée dans notre apprentissage à l'hôpital malheureusement. La science conduit au savoir ; l'opinion conduit à l'ignorance. (Hippocrate, IV -IVe s. av. J.-C.) Laure 23 ans Lorsque j'avais 18 ans, je me suis cassée la cheville. J'ai dû être opérée et hospitalisée. Lors de mon 3 ème jour d'hospitalisation, en post-chirurgie, j'ai rencontré un docteur (que je ne connaissais pas) qui faisait sa visite avec les externes. Ce docteur m'a simplement dit bonjour puis a expliqué mon cas aux externes sans s'adresser à moi. Elle a cité les différentes complications qu'il pouvait m'arriver et a d'ailleurs utilisé les termes « une chance sur deux pour que cela nécrose et qu'on doive faire une arthrodèse ». Puis elle est passée au patient suivant. Ce docteur a clairement manqué d'empathie et ne m'a jamais considérée autrement qu'une « fracture du talus » qui pourrait se compliquer. La médecine narrative lui aurait appris à porter plus d'attention à sa patiente et ses peurs. Elle m'aurait alors expliqué ce que sont ces complications et n'aurait pas utilisé le terme « chance » mais « risque ». Du bien-être du patient et de sa confiance en son médecin découle également la guérison, puisque ce médecin m'a prescrit des séances de kinésithérapie sans m'expliquer leur intérêt ni leur bénéfice. Etant en première année de médecine, avec un emploi du temps chargé, je n'ai pas pu suivre de manière optimale cette rééducation. Si l'on m'avait dit que je garderais une instabilité à la cheville, je n'aurais jamais hésité et j'aurais reconsidéré mes priorités. La médecine narrative nous fait réfléchir à considérer le patient dans sa globalité lors de sa prise en charge également, il convient de tenter de comprendre les émotions du patient pour optimiser cette prise en charge. Parmi les médecins, beaucoup le sont par le titre, bien peu par le fait. (Hippocrate, I -IVe s. av. J.-C.) Justin 22ans J'ai choisi de vous parler d'une situation en particulier qui s'est produite lors de mon stage en chirurgie viscérale. En début de matinée, une patiente est entrée pour la préparation de son intervention deux jours plus tard. Il s'agissait d'une intervention lourde, une exérèse totale de l'oesophage remplacé par des anses coliques. Je me suis alors rendu compte qu'à deux jours de sa chirurgie, elle avait encore énormément de questions, d'incompréhensions ; elle avait seulement de vagues idées sur le risque, les complications. Puis, à midi, la visite a commencé. Nous sommes entrés dans sa chambre avec le chef de service car c'était une chambre double. Le Professeur X l'a saluée mais ne comptait pas initialement s'arrêter sur son cas. Suite à une question, difficilement placée par la patiente, il prend deux minutes pour lui répondre. Elle avait demandé : « Comment ça va se passer maintenant docteur ? » Elle connaissait sans doute la réponse, c'était une façon d'entamer la conversation pour qu'on la voie et qu'on la rassure. Le chirurgien a répondu très brièvement, de façon très autoritaire et très paternaliste et ne s'est pas laissé couper la parole. Il a lancé à deux reprises : « C'est moi qui parle, ne me coupez pas la parole, d'accord mon chaton ? » …, à une femme de 64 ans …Puis il est sorti de la salle très rapidement. J'ai vécu des tas d'autres moments similaires durant ce stage mais la détresse de cette patiente en particulier m'a vraiment touché et le choc était d'autant plus grand en suivant la visite du « grand professeur ». Je n'étais pas sure qu'il soit nécessaire de sensibiliser les étudiants en médecine à l'importance du social dans notre profession. Pour moi, il était impossible de débuter des études de médecine sans avoir une grande empathie. Force est de constater que ce n'est pas inné et si cet enseignement peut permettre de former des médecins plus à l'écoute, alors, il est aussi important que la physiologie ou l'anatomie. Chaque témoignage écrit, puis lu au petit groupe animé par un sénior, a donné lieu à des échanges, des partages souvent très personnels et émouvants, avec parfois de véritables cris d'indignation ou de sentiments d'impuissance, mais au-delà de l'émotion partagée, les étudiants ont tous témoignés de la reconnaissance d'avoir été écoutés, et aidés à acquérir plus d'expérience et surtout de se sentir moins seuls face leurs détresses au coeur de la nuit impersonnelle de l'hôpital, celles des malades et de leurs des familles. Entendre les mots pour que les maux puissent se dire « Aimer quelqu'un c'est l'entendre raconter sa vie et la lui raconter à son tour, et exister en général c'est le récit de sa vie. Alors le récit peut être de telle ou telle nature, héroïque, comique, et cetera...Mais il faut un récit, il faut raconter, il faut relater, il faut transformer sa vie dans une chose qu'on peut dire. Nous avons tous besoin d'un récit pour exister. » (Serres, 2006) Nous l'avons lu, entendu, exprimé, raconté dans ces retours d'expériences, pour soigner, il faut d'abord écouter, ce devrait être une évidence mais il faut l'apprendre pour acquérir de l'expérience. C'est tout l'intérêt des consultations simulées, ou des jeux de rôles, car cette capacité à conjuguer les deux pôles d'un bon médecin, c'est de mettre au bout de son stéthoscope, une oreille attentive. Cette capacité d'écoute attentive serait si souvent mise à mal selon les études que deux médecins lancent un cri d'alarme dans leur livre Docteur, écoutez ! Anne Révah-Lévy, professeur de pédopsychiatrie, et Laurence Verneuil, professeur de dermato-vénéréologie rappellent que le temps moyen de parole accordé à un patient avant qu'il ne soit interrompu par le spécialiste consulté est de 23 secondes. (Gouyon M., 2009). De nombreuses études démontrent que la voix du patient n'est pas assez écoutée: en 1984, (Beckman Hb.& Frankel Rm. 1984), l'analyse de 74 consultations de ville montrait que seuls 23 % des patients étaient invités à exposer la totalité de leurs symptômes. Ceux-ci seraient interrompus par le médecin au bout d'une vingtaine de secondes, selon les études (Labarthe G., 2004). Dans une publication de 2006 (Breuil-Genier P & Goffette C., 2006), sur chaque consultation de 20 minutes, les médecins estimaient avoir écouté leurs patients en moyenne 9minutes ; la réalité était plus proche d'une minute! La parole du médecin ne semble pas mieux préservée, avec 6,6 interruptions par heure de travail, entre coups de fil intempestifs, biper et autres demandes administratives urgentes ! Mais l'apprentissage de la médecine se situe aussi dans le voir, et le premier fondement de l'initiation à la clinique, à travers la séméiologie, est l'observation. Ce travail repose sur le regard et la description, à partir d'un corpus de connaissances acquises sur l'organisme par appareils (cerveau, coeur, reins, poumons…), amenant ensuite à évaluer selon les données actuelles de la science, le diagnostic, le pronostic et la prise en charge. Cet apprentissage repose sur le contenu présumé objectif du témoignage du patient, tandis que tout ce qui est sensé relever de l'expérience subjective est laissé de côté. Mais, cette séparation de l'objectif et du subjectif dans la parole ne relève pas de l'évidence, et chaque praticien le sait par expérience, on ne peut évaluer quoi que ce soit du mal-être de l'autre sans interroger sa propre expérience subjective. On retiendra plus les indications anatomiques, qui pourront servir de base à une interprétation organiciste, et on laissera de côté toute la narrativité de l'histoire du patient. Si, comme on aurait encore trop tendance à l'enseigner, on limite l'échange de paroles à un entretien rigoureusement dirigé, codifié, proche d'un interrogatoire policier, qui vise à recueillir des données attendues, on ne laisse aucune place à ce qu'il est convenu d'appeler la subjectivité de la plainte du patient, c'est-à-dire à son évaluation du mal-être qui le conduit à consulter.Ce mode de mise en mouvement narratif privilégie les particularités de l'expérience vécue, pour le patient mais aussi pour le médecin en formation. Il crée un monde de significations implicites pour élargir le champ des possibles et installer des perspectives multiples qui permettent de reconnaître la complexité et la subjectivité des expériences. Le patient, lors des entretiens (et non pas des interrogatoires comme certains les nomment encore), peut redevenir auteur de sa propre vie grâce aux questions qui lui sont posées et qui lui permettent de décrire des événements qui deviennent histoire grâce à la mise en intrigue narrative. Parfois, il suffit juste de se donner un cadre, un bureau au calme, porte fermée, sans sur-sollicitations du téléphone ou des mails, un peu de temps, celui d'une relance dans le flou des plaintes ou au contraire dans l'impossibilité à décrire ses maux. Les consultations simulées avec les patients experts qui ne durent que 8 minutes sont riches d'expériences car, elles montrent la possibilité en un temps contraint de mener à bien une consultation d'orientation, en allant bien au-delà du scénario présenté par le patient expert : chercher les antécédents personnels et familiaux, la biographie, les modes de vie, les questions délicates liées à l'intimité d'un couple quand il s'agit, par exemple, d'explorer une plainte concernant la prostate d'un homme âgé. L'expérience s'acquière grâce au tutorat, en étant en situation, et en acceptant les remarques des seniors, mais aussi des patients experts qui évaluent lors d'une séance de débriefing ces consultations simulées. Grâce à ces fictions « réelles » car, en situation dans un box de consultation, les jeunes médecins apprennent aussi des savoirs faire et des manières d'être. Je mets toujours en perspectives ce qui vient de se dire, de se vivre et leur montre comment explorer ces moments d'ouverture, d'écoute attentive et empathique, car avoir de l'expérience c'est se saisir de ce juste moment, ce kaïros qui permet d'encourager les patients à bâtir un récit dans lequel ils arriveront à réaliser des actions. Ces récits d'expériences si singulières décrivent des moments où le sujet est ainsi dans une relation de coopération avec les autres et où il se sent reconnu et accepté dans sa différence. C'est dans cet espace d'intersubjectivité confiante que la personne malade peut réaliser des actions qui sont en lien avec ses intentions.

  ne vient pas seulement compléter le diagnostic technoscientifique tel un récit qui viendrait adoucir la médecine basée sur les preuves ; il s'agit d'emblée d'intégrer la maladie et la démarche diagnostique dans une anamnèse narrative.

Jacques Chardonne (1961) Lettre à Paul Morand, le 3 février 1961.

Tous les prénoms ont été modifiés.