Reseaux de Petri

PARTIE A : GENERALITES

Presentation

Le cours "Reseaux de Petri" introduit un formalisme graphique et mathematique puissant pour modeliser, analyser, et valider les systemes a evenements discrets (SED). Les reseaux de Petri sont particulierement adaptes pour representer des systemes avec concurrence, synchronisation, et partage de ressources. Ils sont utilises en automatique, informatique, logistique, et de nombreux autres domaines.

Annee Universitaire : 2023-2024
Semestre : 8
Categorie : Automatique / Systemes a Evenements Discrets


PARTIE B : PARTIE DESCRIPTIVE

Details de l'experience

Environnement et contexte

Le cours combinait theorie formelle (algebre, theorie des graphes) avec applications pratiques via des outils logiciels de modelisation et simulation (PIPE, Tina). Nous avons modelise des systemes varies: systemes de production, protocoles de communication, workflows, et analyse leurs proprietes (vivacite, bornitude, absence de blocage).

Ma fonction

Dans ce cours, j'ai ete responsable de :

  • Comprendre la syntaxe et semantique des reseaux de Petri
  • Modeliser des systemes concurrents et distribues
  • Analyser les proprietes structurelles et comportementales
  • Utiliser l'equation d'etat et invariants
  • Verifier proprietes (vivacite, bornitude, reversibilite)
  • Simuler et valider des modeles
  • Appliquer les extensions (temporises, colores, stochastiques)
  • Utiliser les reseaux de Petri pour concevoir et valider des systemes de commande

PARTIE C : PARTIE TECHNIQUE

Cette section explore les aspects techniques des reseaux de Petri.

Concepts techniques appris

1. Definition et Syntaxe

Reseau de Petri R = (P, T, Pre, Post) :

  • P : ensemble de places (etats, ressources)
  • T : ensemble de transitions (evenements, actions)
  • Pre : P x T → N (arcs des places vers transitions, poids)
  • Post : T x P → N (arcs des transitions vers places, poids)

Representation graphique :

  • Places : cercles
  • Transitions : rectangles (ou barres)
  • Arcs : fleches avec poids (1 si omis)
  • Jetons (tokens) : points noirs dans places

Marquage M : P → N

Fonction indiquant nombre de jetons dans chaque place. M0 = marquage initial.

2. Regles de Franchissement

Transition t est franchissable (enabled) ssi :

∀p ∈ P: M(p) ≥ Pre(p,t)

Assez de jetons dans chaque place d'entree.

Franchissement de t :

M' = M - Pre(·,t) + Post(t,·)

On retire Pre(p,t) jetons de chaque place p, on ajoute Post(t,p).

Notation : M →t M'

Sequence de franchissement :

M0 →t1 M1 →t2 M2 → ... →tn Mn

3. Graphe de Marquage

Ensemble d'accessibilite R(M0) :

Ensemble de tous les marquages atteignables depuis M0.

Graphe de marquage :

  • Sommets : marquages
  • Arcs : transitions

Representation de l'espace d'etats.

Probleme : explosion combinatoire (nombre de marquages peut etre exponentiel).

4. Proprietes Comportementales

Reseau de Petri avec jetons

Figure : Exemple de reseau de Petri avec places, transitions et jetons

Bornitude :

∃ k tel que ∀M ∈ R(M0), ∀p ∈ P : M(p) ≤ k

Systeme borne : nombre de jetons limite. Important : evite debordements (buffers, files).

1-sur (safe) : borne par 1.

Vivacite (liveness) :

Une transition est vivante si elle peut toujours redevenir franchissable.

Niveaux de vivacite :

  • L0 (mort) : jamais franchissable
  • L1 (potentiellement franchissable) : franchissable au moins une fois
  • L2 : peut etre franchie infiniment sur une sequence
  • L3 : peut etre franchie infiniment souvent (sur toute sequence infinie)
  • L4 (vivante) : franchissable depuis tout marquage accessible

Reseau vivant : toutes transitions L4-vivantes.

Blocage (deadlock) :

Marquage M ou aucune transition n'est franchissable.

Reversibilite :

∀M ∈ R(M0) : M0 ∈ R(M)

On peut toujours revenir a l'etat initial.

Quasi-vivacite :

∀t ∈ T, ∃M ∈ R(M0) : t franchissable depuis M.

Toute transition peut etre franchie au moins une fois.

5. Equation d'Etat

Matrice d'incidence C :

C = Post^T - Pre^T

C(t,p) = gain net de jetons dans p par franchissement de t.

Equation d'etat fondamentale :

M = M0 + C^T · σ

Ou σ est le vecteur de franchissement (nombre de fois chaque transition a ete franchie).

Usage :

Condition necessaire (mais pas suffisante) d'accessibilite. Si M inaccessible, alors pas de solution entiere positive a l'equation.

6. Invariants

P-invariants (invariants de places) :

Vecteur y ≥ 0 tel que :

C · y = 0

Interpretation :

y^T · M = y^T · M0 = constante

Combinaison ponderee de jetons conservee.

Exemple : conservation de ressources.

T-invariants (invariants de transitions) :

Vecteur x ≥ 0 tel que :

C^T · x = 0

Interpretation :

Sequence de transitions ramenant au meme marquage. Si x franchissable depuis M, alors M →* M.

Usage : cycles, comportements repetitifs.

Reseau couvert par P-invariants :

Toute place appartient a au moins un P-invariant. ⇒ Reseau borne.

7. Sous-Classes de Reseaux

Graphe d'etats :

Chaque transition a exactement une place d'entree et une de sortie. Modelise automates finis.

Graphe d'evenements :

Chaque place a exactement une transition d'entree et une de sortie. Modelise synchronisation.

Reseau libre choix (free choice) :

Si deux transitions partagent place d'entree, elles ont meme ensemble de places d'entree. Simplifie analyse.

Reseau sauf (safe) :

1-borne.

8. Extensions des Reseaux de Petri

Reseaux de Petri Temporises (TPN) :

Ajout du temps : delais sur transitions ou durees de franchissement.

Types :

  • P-temporise : jetons ont age minimal avant utilisation
  • T-temporise : transition franchit apres delai

Analyse : plus complexe (espace d'etats infini). Classes d'etats, automates temporises.

Reseaux de Petri Colores (CPN) :

Jetons ont "couleurs" (types, attributs).

Avantages :

  • Modele compact (un jeton colore represente plusieurs jetons classiques)
  • Donnees structurees

Outil : CPN Tools

Reseaux de Petri Stochastiques (SPN) :

Transitions avec taux de franchissement (lois exponentielles).

Usage : evaluation de performances (comme files d'attente). Equivalent a chaines de Markov continues.

Reseaux de Petri Hybrides :

Variables continues et discretes. Modelise systemes hybrides (manufacturiers, thermiques, etc.).

9. Analyse par Reduction

Transformations preservant proprietes :

Fusion de places paralleles :

Places avec memes transitions amont/aval.

Fusion de transitions paralleles :

Transitions avec memes places amont/aval.

Elimination de places implicites :

Place dont marquage toujours suffit (contrainte redondante).

Elimination de transitions :

Sous certaines conditions (ne change pas comportement).

Objectif : simplifier modele avant analyse.

10. Outils Logiciels

PIPE (Platform Independent Petri net Editor) :

  • Modelisation graphique
  • Simulation
  • Analyse (graphe de marquage, invariants)
  • Java, open source

Tina :

  • Construction graphe de marquage
  • Verification proprietes temporelles (CTL)
  • Synthese de controleurs

CPN Tools :

  • Pour reseaux colores
  • Simulation, state space analysis

ROMEO :

  • Reseaux temporises avec stopwatches
  • Temps dense

GreatSPN :

  • Stochastiques
  • Evaluation de performances

11. Commande par Reseaux de Petri

Synthese de controleurs :

Probleme : systeme (plante) + specifications → controleur

Approches :

Theorie de la supervision :

Desactiver transitions interdites pour respecter specifications.

Controle par place de controle :

Ajouter places (avec arcs) pour imposer contraintes.

Exemple : eviter blocage, limiter nombre de pieces en cours (WIP).

Applications :

  • Systemes de production flexibles (FMS)
  • Workflows
  • Protocoles de communication

12. Applications

Systemes de production :

  • Modeliser lignes de fabrication
  • Partage de ressources (machines, robots)
  • Ordonnancement
  • Detection de blocages

Protocoles de communication :

  • Handshake, synchronisation
  • Detection d'interblocages
  • Verification de protocoles

Workflows :

  • Processus metier
  • Gestion de documents
  • Validation de processus

Systemes informatiques :

  • Allocation memoire
  • Synchronisation de threads
  • Gestion de transactions

Systemes embarques :

  • Controle concurrent
  • Verification avant implementation

PARTIE D : PARTIE ANALYTIQUE

Connaissances et competences mobilisees

  • Comprehension des systemes a evenements discrets
  • Modelisation graphique et formelle
  • Algebre lineaire (matrices, invariants)
  • Theorie des graphes
  • Analyse de proprietes (vivacite, bornitude)
  • Utilisation d'outils logiciels de simulation
  • Verification formelle
  • Synthese de lois de commande

Auto-evaluation

Ce cours a ete mathematiquement riche et conceptuellement dense. Les reseaux de Petri sont un formalisme elegant mais necessitent un changement de paradigme par rapport aux systemes continus etudies precedemment.

La representation graphique est intuitive et pedagogique. Visualiser les jetons circuler dans le reseau aide a comprendre la dynamique. Cependant, passer du graphique au formel (matrices, equations) demande rigueur.

L'analyse des proprietes (vivacite, bornitude) est cruciale pour valider un systeme. Un modele qui bloque ou dont les files explosent est inutilisable. Les methodes d'analyse (graphe de marquage, invariants) fournissent des outils rigoureux.

Le graphe de marquage est conceptuellement simple mais peut devenir gigantesque (explosion combinatoire). C'est une limite pratique importante. Les techniques de reduction et les analyses partielles (invariants sans construire tout le graphe) sont essentielles.

Les invariants (P et T) sont puissants. Les P-invariants permettent de prouver la bornitude elegamment. Les T-invariants revelent les cycles et comportements repetitifs.

L'equation d'etat (M = M0 + C^Tσ) est centrale. Elle offre une condition necessaire d'accessibilite calculable algebriquement, sans explorer tous les etats.

Les extensions (temporises, colores, stochastiques) augmentent l'expressivite mais complexifient l'analyse. Il y a un trade-off entre pouvoir de modelisation et analysabilite.

La synthese de controleurs par theorie de la supervision ouvre des perspectives interessantes pour automatiser la conception de systemes surs.

Les outils logiciels (PIPE, Tina) sont indispensables pour traiter des reseaux realistes. Modeliser a la main est formateur mais limite a des exemples jouets.

Les applications sont nombreuses et variees. Cela montre la generalite du formalisme. Tout systeme avec evenements, concurrence, et ressources partagees peut beneficier d'une modelisation par reseau de Petri.

Mon avis

Ce cours fournit des outils puissants pour les systemes a evenements discrets, complementaires aux techniques continues. Il est essentiel pour l'automaticien travaillant sur systemes manufacturiers, protocoles, ou systemes embarques.

Points forts :

  • Formalisme rigoureux et visuel
  • Analyse de proprietes critiques (vivacite, absence de blocage)
  • Applicabilite large
  • Outils logiciels disponibles

Points a ameliorer :

  • Plus de cas d'etudes industriels complexes
  • Lien avec implementation (code genere depuis modele)
  • Comparaison avec autres formalismes (automates, algebre de processus)
  • Techniques pour gerer explosion combinatoire

Reflexions personnelles :

Les reseaux de Petri sont un langage graphique universel pour SED. Leur avantage majeur est l'integration de la modelisation, simulation, et verification formelle dans un meme cadre.

La verification formelle est cruciale pour systemes critiques (aerospatial, medical, nucleaire). Prouver mathematiquement l'absence de blocage ou de depassement de capacite evite bugs catastrophiques.

Cependant, l'explosion combinatoire reste le defi majeur. Pour systemes realistes de grande taille, le graphe de marquage complet est incalculable. Les techniques d'abstraction, reduction, et verification symbolique sont des recherches actives.

La modularite et composabilite des reseaux de Petri sont limitees. Combiner plusieurs sous-reseaux peut etre ardu. Les reseaux colores et hierarchiques aident mais la complexite reste.

Le lien avec l'implementation est parfois flou. Modeliser c'est bien, mais comment passer du modele au code (PLC, microcontroleur)? La generation automatique de code depuis reseaux de Petri existe mais n'est pas standard.

Applications professionnelles :

Competences en reseaux de Petri applicables dans :

  • Automatisation industrielle : conception et validation systemes de production
  • Conception systemes embarques : verification proprietes temps reel
  • Reseaux de communication : protocoles, gestion ressources
  • Logiciels : modelisation workflows, processus metier
  • Recherche : formalisation et analyse de systemes complexes

Le marche :

Moins mainstream que controle continu ou programmation classique. Niche dans domaines critiques necessitant verification formelle. Competence differenciante pour ingenieurs systemes complexes.

L'avenir :

  • Integration avec Model-Based Design (Simulink, etc.)
  • Codesign hardware/software
  • Verification de systemes cyber-physiques
  • IA et apprentissage : synthese automatique de modeles depuis donnees

En conclusion, les reseaux de Petri sont un formalisme puissant pour modeliser, analyser et verifier des systemes a evenements discrets. Ils completent les automates et les langages de description (GRAFCET, Statecharts) en offrant une semantique mathematique rigoureuse et des outils d'analyse formelle. Ils restent utilises en recherche et dans l'industrie pour les systemes critiques.


Documents de Cours

Cours Complet Reseaux de Petri

Cours complet : modelisation, proprietes structurelles et comportementales, analyse de vivacite et blocage.

Telecharger

Examen 2023

Sujet d'examen 2023 : construction de reseaux, calcul d'invariants, analyse de blocage et synthese.

Telecharger

Correction 2023

Correction complete de l'examen 2023 avec methodes d'analyse et explications detaillees.

Telecharger

Petri Nets

PART A: GENERALITIES

Presentation

The "Petri Nets" course introduces a powerful graphical and mathematical formalism for modeling, analyzing, and validating discrete event systems (DES). Petri nets are particularly suited for representing systems with concurrency, synchronization, and resource sharing. They are used in control engineering, computer science, logistics, and many other fields.

Academic Year: 2023-2024
Semester: 8
Category: Control Engineering / Discrete Event Systems


PART B: DESCRIPTIVE PART

Experience Details

Environment and Context

The course combined formal theory (algebra, graph theory) with practical applications using modeling and simulation software tools (PIPE, Tina). We modeled various systems: production systems, communication protocols, workflows, and analyzed their properties (liveness, boundedness, deadlock-freeness).

My Function

In this course, I was responsible for:

  • Understanding the syntax and semantics of Petri nets
  • Modeling concurrent and distributed systems
  • Analyzing structural and behavioral properties
  • Using the state equation and invariants
  • Verifying properties (liveness, boundedness, reversibility)
  • Simulating and validating models
  • Applying extensions (timed, colored, stochastic)
  • Using Petri nets to design and validate control systems

PART C: TECHNICAL PART

This section explores the technical aspects of Petri nets.

Technical Concepts Learned

1. Definition and Syntax

Petri Net R = (P, T, Pre, Post):

  • P: set of places (states, resources)
  • T: set of transitions (events, actions)
  • Pre: P x T → N (arcs from places to transitions, weights)
  • Post: T x P → N (arcs from transitions to places, weights)

Graphical representation:

  • Places: circles
  • Transitions: rectangles (or bars)
  • Arcs: arrows with weights (1 if omitted)
  • Tokens: black dots inside places

Marking M: P → N

Function indicating the number of tokens in each place. M0 = initial marking.

2. Firing Rules

Transition t is fireable (enabled) iff:

∀p ∈ P: M(p) ≥ Pre(p,t)

Enough tokens in each input place.

Firing of t:

M' = M - Pre(·,t) + Post(t,·)

We remove Pre(p,t) tokens from each place p, and add Post(t,p).

Notation: M →t M'

Firing sequence:

M0 →t1 M1 →t2 M2 → ... →tn Mn

3. Reachability Graph

Reachability set R(M0):

Set of all markings reachable from M0.

Reachability graph:

  • Nodes: markings
  • Edges: transitions

Representation of the state space.

Problem: combinatorial explosion (number of markings can be exponential).

4. Behavioral Properties

Petri Net with tokens

Figure: Example of a Petri net with places, transitions, and tokens

Boundedness:

∃ k such that ∀M ∈ R(M0), ∀p ∈ P: M(p) ≤ k

Bounded system: limited number of tokens. Important: prevents overflows (buffers, queues).

1-safe: bounded by 1.

Liveness:

A transition is live if it can always become fireable again.

Liveness levels:

  • L0 (dead): never fireable
  • L1 (potentially fireable): fireable at least once
  • L2: can be fired infinitely along some sequence
  • L3: can be fired infinitely often (along every infinite sequence)
  • L4 (live): fireable from any reachable marking

Live net: all transitions are L4-live.

Deadlock:

A marking M where no transition is fireable.

Reversibility:

∀M ∈ R(M0): M0 ∈ R(M)

It is always possible to return to the initial state.

Quasi-liveness:

∀t ∈ T, ∃M ∈ R(M0): t is fireable from M.

Every transition can be fired at least once.

5. State Equation

Incidence matrix C:

C = Post^T - Pre^T

C(t,p) = net token gain in p by firing t.

Fundamental state equation:

M = M0 + C^T · σ

Where σ is the firing vector (number of times each transition has been fired).

Usage:

Necessary (but not sufficient) condition for reachability. If M is unreachable, then there is no non-negative integer solution to the equation.

6. Invariants

P-invariants (place invariants):

Vector y ≥ 0 such that:

C · y = 0

Interpretation:

y^T · M = y^T · M0 = constant

Weighted combination of tokens is conserved.

Example: resource conservation.

T-invariants (transition invariants):

Vector x ≥ 0 such that:

C^T · x = 0

Interpretation:

Firing sequence that returns to the same marking. If x is fireable from M, then M →* M.

Usage: cycles, repetitive behaviors.

Net covered by P-invariants:

Every place belongs to at least one P-invariant. ⇒ Bounded net.

7. Petri Net Subclasses

State graph:

Each transition has exactly one input place and one output place. Models finite automata.

Event graph:

Each place has exactly one input transition and one output transition. Models synchronization.

Free choice net:

If two transitions share an input place, they have the same set of input places. Simplifies analysis.

Safe net:

1-bounded.

8. Petri Net Extensions

Timed Petri Nets (TPN):

Addition of time: delays on transitions or firing durations.

Types:

  • P-timed: tokens have a minimum age before use
  • T-timed: transition fires after a delay

Analysis: more complex (infinite state space). State classes, timed automata.

Colored Petri Nets (CPN):

Tokens have "colors" (types, attributes).

Advantages:

  • Compact model (one colored token represents multiple classic tokens)
  • Structured data

Tool: CPN Tools

Stochastic Petri Nets (SPN):

Transitions with firing rates (exponential distributions).

Usage: performance evaluation (like queuing systems). Equivalent to continuous-time Markov chains.

Hybrid Petri Nets:

Continuous and discrete variables. Models hybrid systems (manufacturing, thermal, etc.).

9. Analysis by Reduction

Property-preserving transformations:

Fusion of parallel places:

Places with the same upstream/downstream transitions.

Fusion of parallel transitions:

Transitions with the same upstream/downstream places.

Elimination of implicit places:

Place whose marking is always sufficient (redundant constraint).

Elimination of transitions:

Under certain conditions (does not change behavior).

Objective: simplify the model before analysis.

10. Software Tools

PIPE (Platform Independent Petri net Editor):

  • Graphical modeling
  • Simulation
  • Analysis (reachability graph, invariants)
  • Java, open source

Tina:

  • Reachability graph construction
  • Temporal property verification (CTL)
  • Controller synthesis

CPN Tools:

  • For colored nets
  • Simulation, state space analysis

ROMEO:

  • Timed nets with stopwatches
  • Dense time

GreatSPN:

  • Stochastic nets
  • Performance evaluation

11. Control Using Petri Nets

Controller synthesis:

Problem: system (plant) + specifications → controller

Approaches:

Supervisory control theory:

Disable forbidden transitions to satisfy specifications.

Control by control place:

Add places (with arcs) to enforce constraints.

Example: avoid deadlock, limit work-in-progress (WIP).

Applications:

  • Flexible manufacturing systems (FMS)
  • Workflows
  • Communication protocols

12. Applications

Production systems:

  • Modeling manufacturing lines
  • Resource sharing (machines, robots)
  • Scheduling
  • Deadlock detection

Communication protocols:

  • Handshake, synchronization
  • Deadlock detection
  • Protocol verification

Workflows:

  • Business processes
  • Document management
  • Process validation

Computer systems:

  • Memory allocation
  • Thread synchronization
  • Transaction management

Embedded systems:

  • Concurrent control
  • Verification before implementation

PART D: ANALYTICAL PART

Knowledge and Skills Mobilized

  • Understanding of discrete event systems
  • Graphical and formal modeling
  • Linear algebra (matrices, invariants)
  • Graph theory
  • Property analysis (liveness, boundedness)
  • Use of simulation software tools
  • Formal verification
  • Control law synthesis

Self Evaluation

This course was mathematically rich and conceptually dense. Petri nets are an elegant formalism but require a paradigm shift compared to the continuous systems studied previously.

The graphical representation is intuitive and pedagogical. Visualizing tokens flowing through the net helps understand the dynamics. However, transitioning from graphical to formal (matrices, equations) requires rigor.

Analyzing properties (liveness, boundedness) is crucial for validating a system. A model that deadlocks or whose queues overflow is unusable. The analysis methods (reachability graph, invariants) provide rigorous tools.

The reachability graph is conceptually simple but can become gigantic (combinatorial explosion). This is a significant practical limitation. Reduction techniques and partial analyses (invariants without building the entire graph) are essential.

Invariants (P and T) are powerful. P-invariants elegantly prove boundedness. T-invariants reveal cycles and repetitive behaviors.

The state equation (M = M0 + C^Tσ) is central. It offers a necessary condition for reachability that is algebraically computable, without exploring all states.

Extensions (timed, colored, stochastic) increase expressiveness but complicate analysis. There is a trade-off between modeling power and analyzability.

Controller synthesis through supervisory control theory opens interesting perspectives for automating the design of safe systems.

Software tools (PIPE, Tina) are essential for handling realistic nets. Manual modeling is educational but limited to toy examples.

The applications are numerous and varied. This demonstrates the generality of the formalism. Any system with events, concurrency, and shared resources can benefit from Petri net modeling.

My Opinion

This course provides powerful tools for discrete event systems, complementary to continuous techniques. It is essential for control engineers working on manufacturing systems, protocols, or embedded systems.

Strengths:

  • Rigorous and visual formalism
  • Analysis of critical properties (liveness, deadlock-freeness)
  • Broad applicability
  • Available software tools

Areas for improvement:

  • More complex industrial case studies
  • Link with implementation (code generated from model)
  • Comparison with other formalisms (automata, process algebra)
  • Techniques for managing combinatorial explosion

Personal reflections:

Petri nets are a universal graphical language for DES. Their major advantage is the integration of modeling, simulation, and formal verification within the same framework.

Formal verification is crucial for critical systems (aerospace, medical, nuclear). Mathematically proving the absence of deadlock or capacity overflow prevents catastrophic bugs.

However, combinatorial explosion remains the major challenge. For large-scale realistic systems, the complete reachability graph is intractable. Abstraction, reduction, and symbolic verification techniques are active areas of research.

The modularity and composability of Petri nets are limited. Combining multiple subnets can be difficult. Colored and hierarchical nets help, but complexity remains.

The link with implementation is sometimes unclear. Modeling is good, but how to go from model to code (PLC, microcontroller)? Automatic code generation from Petri nets exists but is not standardized.

Professional applications:

Petri net skills are applicable in:

  • Industrial automation: design and validation of production systems
  • Embedded systems design: real-time property verification
  • Communication networks: protocols, resource management
  • Software: workflow modeling, business processes
  • Research: formalization and analysis of complex systems

The market:

Less mainstream than continuous control or classical programming. Niche in critical domains requiring formal verification. A differentiating skill for complex systems engineers.

The future:

  • Integration with Model-Based Design (Simulink, etc.)
  • Hardware/software codesign
  • Verification of cyber-physical systems
  • AI and learning: automatic model synthesis from data

In conclusion, Petri nets are a powerful formalism for modeling, analyzing, and verifying discrete event systems. They complement automata and description languages (GRAFCET, Statecharts) by offering a rigorous mathematical semantics and formal analysis tools. They remain widely used in research and industry for critical systems.


Course Documents

Complete Petri Nets Course

Complete course: modeling, structural and behavioral properties, liveness and deadlock analysis.

Download

2023 Exam

2023 exam paper: network construction, invariant computation, deadlock analysis and synthesis.

Download

2023 Solutions

Complete solutions for the 2023 exam with analysis methods and detailed explanations.

Download