Tecnología de la Programación
Semántica OperacionalDavid Cabrero Souto Facultad de Informática Universidade da Coruña
Verificación formal
Recordar descriptores BOE:
Diseño de algoritmos Análisis de algoritmos
Lenguajes de programación
Diseño de programas: Descomposición modular y documentación
Técnicas de verificación Pruebas de programas
Pruebas de programas:validación
Ejecución de un conjunto de tests generados sintética o manualmente.
Prueba formal de propiedades:verificación Demostración formal de propiedades .
Necesitamos una definición formal del significado (semántica) de los lenguajes de programación.
Verificación formal
Recordar descriptores BOE:
Diseño de algoritmos Análisis de algoritmos
Lenguajes de programación
Diseño de programas: Descomposición modular y documentación
Técnicas de verificación Pruebas de programas
Pruebas de programas:validación
Ejecución de un conjunto de tests generados sintética o manualmente.
Prueba formal de propiedades:verificación Demostración formal de propiedades .
Necesitamos una definición formal del significado (semántica) de los lenguajes de programación.
Verificación formal
Recordar descriptores BOE:
Diseño de algoritmos Análisis de algoritmos
Lenguajes de programación
Diseño de programas: Descomposición modular y documentación
Técnicas de verificación Pruebas de programas
Pruebas de programas:validación
Ejecución de un conjunto de tests generados sintética o manualmente.
Prueba formal de propiedades:verificación
Demostración formal de propiedades .
Necesitamos una definición formal del significado (semántica) de los lenguajes de programación.
Verificación formal
Recordar descriptores BOE:
Diseño de algoritmos Análisis de algoritmos
Lenguajes de programación
Diseño de programas: Descomposición modular y documentación
Técnicas de verificación Pruebas de programas
Pruebas de programas:validación
Ejecución de un conjunto de tests generados sintética o manualmente.
Prueba formal de propiedades:verificación
Demostración formal de propiedades .
Necesitamos una definición formal del significado (semántica) de los lenguajes de programación.
Verificación formal
Recordar descriptores BOE:
Diseño de algoritmos Análisis de algoritmos
Lenguajes de programación
Diseño de programas: Descomposición modular y documentación
Técnicas de verificación Pruebas de programas
Pruebas de programas:validación
Ejecución de un conjunto de tests generados sintética o manualmente.
Prueba formal de propiedades:verificación
Demostración formal (base matemática) de propiedades .
Necesitamos una definición formal del significado (semántica) de los lenguajes de programación.
Verificación formal
Recordar descriptores BOE:
Diseño de algoritmos Análisis de algoritmos
Lenguajes de programación
Diseño de programas: Descomposición modular y documentación
Técnicas de verificación Pruebas de programas
Pruebas de programas:validación
Ejecución de un conjunto de tests generados sintética o manualmente.
Prueba formal de propiedades:verificación
Demostración formal (base matemática) de propiedades (para todos los casos).
Necesitamos una definición formal del significado (semántica) de los lenguajes de programación.
Verificación formal
Recordar descriptores BOE:
Diseño de algoritmos Análisis de algoritmos
Lenguajes de programación
Diseño de programas: Descomposición modular y documentación
Técnicas de verificación Pruebas de programas
Pruebas de programas:validación
Ejecución de un conjunto de tests generados sintética o manualmente.
Prueba formal de propiedades:verificación
Demostración formal (base matemática) de propiedades (para todos los casos).
Necesitamos una definición formal del significado (semántica) de los lenguajes de programación.
Lenguaje de ejemplo
IMP (IMPerativo) Estructuras básicas: Secuencia Alternativa RepeticiónCambio de estado: variables y asignación. Tipos básicos: enteros, strings.
Tipos compuestos: arrays. Funciones.
IMP. Sintaxis aproximada
IMP ::= ’eof’ | CMDS ’eof’ CMDS ::= CMD ’;’ | CMD ’;’ CMDS CMD ::= ’skip’| Type Variable ’:=’ EXP | Variable ’:=’ EXP
| Type Variable ’[’ Exp ’]’ ’:=’ EXP | Variable ’[’ Exp ’]’ ’:=’ EXP
| ’if’ EXP ’then’ CMDS ’else’ CMDS ’fi’ | ’while’ EXP ’do’ CMDS ’done’
Semántica operacional
Define la semántica de un lenguaje de programación en
función de loscambios de estadoque producen cada una de
las instrucciones del lenguaje.
No es adecuado para todo tipo de lenguajes.
IMP- Definición
(I)Conjuntos sintácticos asociados con IMP.
númerosN
BooleanosT ={true,false} Posiciones de memoriaLoc Expresiones aritméticasAexp Expresiones booleanasBexp ComandosCom
IMP- Definición
(I)Conjuntos sintácticos asociados con IMP.
númerosN
BooleanosT ={true,false}
Posiciones de memoriaLoc Expresiones aritméticasAexp Expresiones booleanasBexp ComandosCom
IMP- Definición
(I)Conjuntos sintácticos asociados con IMP.
númerosN
BooleanosT ={true,false}
Posiciones de memoriaLoc
Expresiones aritméticasAexp Expresiones booleanasBexp ComandosCom
IMP- Definición
(I)Conjuntos sintácticos asociados con IMP.
númerosN
BooleanosT ={true,false}
Posiciones de memoriaLoc
Expresiones aritméticasAexp
Expresiones booleanasBexp ComandosCom
IMP- Definición
(I)Conjuntos sintácticos asociados con IMP.
númerosN
BooleanosT ={true,false}
Posiciones de memoriaLoc
Expresiones aritméticasAexp
Expresiones booleanasBexp
IMP- Definición
(I)Conjuntos sintácticos asociados con IMP.
númerosN
BooleanosT ={true,false}
Posiciones de memoriaLoc
Expresiones aritméticasAexp
Expresiones booleanasBexp
IMP- Definición
(II)Convenciones
n,mson variables enN n,m∈N
X,Y son variables enLoc X,Y ∈Loc ai son variables enAexp ai ∈Aexp
bi son variables enBexp bi ∈Bexp
IMP- Definición
(II)Convenciones
n,mson variables enN n,m∈N
X,Y son variables enLoc X,Y ∈Loc
ai son variables enAexp ai ∈Aexp
bi son variables enBexp bi ∈Bexp
IMP- Definición
(II)Convenciones
n,mson variables enN n,m∈N
X,Y son variables enLoc X,Y ∈Loc
ai son variables enAexp ai ∈Aexp
bi son variables enBexp bi ∈Bexp
IMP- Definición
(II)Convenciones
n,mson variables enN n,m∈N
X,Y son variables enLoc X,Y ∈Loc
ai son variables enAexp ai ∈Aexp
bi son variables enBexp bi ∈Bexp
IMP- Definición
(II)Convenciones
n,mson variables enN n,m∈N
X,Y son variables enLoc X,Y ∈Loc
ai son variables enAexp ai ∈Aexp
bi son variables enBexp bi ∈Bexp
IMP- Definición (Aexp)
Expresiones aritméticas Aexp ::= n | X | a0+a1 | a0−a1 | a0∗a1IMP- Definición (Bexp)
Expresiones booleanas Bexp ::= true | false | a0=a1 | a0<=a1 | notb | b0andb1 | b0orb1IMP- Definición (Comm)
Instrucciones Comm ::= skip | X :=a | c0;c1 | ifbthenc0elsec1fi | whileb doc doneEstados
El conjunto de estadosΣestá formado por las funciones:
σ:Loc−>N
(Sólo variables enteras)
Dado un estadoσ, representaremos el valor de la posicionX
como: σ(X) Y la extensión de un estadoσ[X ←m]: σ[X ←m](Y) = ( m Y =X , σ(Y) siY 6=X . Indistintamente σ[X ←m] ó σ[m/X]
Evaluación
Evaluación de una expresión aritméticaaen un estadoσ
<a, σ >→n
Evaluación de una expresión booleanaben un estadoσ
<b, σ >→ {true,false}
Ejecución de una instrucciónc en un estadoσ
Secuentes
Si las premisas son ciertas, se puede deducir la conclusión.
<premisas > <conclusion>
F1. . .Fn G1. . .Gm
F1. . .Fn→G1. . .Gm
Evaluación de expresiones aritméticas
Constantes <n, σ >→n Variables <X, σ >→σ(X) Suma <a0, σ >→n <a1, σ >→m <a0+a1, σ >→n+m Resta <a0, σ >→n <a1, σ >→m <a0−a1, σ >→n−m Multiplicación <a0, σ >→n <a1, σ >→m <a0∗a1, σ >→n∗mEvaluación de expresiones aritméticas
Constantes <n, σ >→n Variables <X, σ >→σ(X) Suma <a0, σ >→n <a1, σ >→m <a0+a1, σ >→n+m Resta <a0, σ >→n <a1, σ >→m <a0−a1, σ >→n−m Multiplicación <a0, σ >→n <a1, σ >→m <a0∗a1, σ >→n∗mEvaluación de expresiones aritméticas
Constantes <n, σ >→n Variables <X, σ >→σ(X) Suma <a0, σ >→n <a1, σ >→m <a0+a1, σ >→n+m Resta <a0, σ >→n <a1, σ >→m <a0−a1, σ >→n−m Multiplicación <a0, σ >→n <a1, σ >→m <a0∗a1, σ >→n∗mEvaluación de expresiones aritméticas
Constantes <n, σ >→n Variables <X, σ >→σ(X) Suma <a0, σ >→n <a1, σ >→m <a0+a1, σ >→n+m Resta <a0, σ >→n <a1, σ >→m <a0−a1, σ >→n−m Multiplicación <a0, σ >→n <a1, σ >→m <a0∗a1, σ >→n∗mEvaluación de expresiones aritméticas
Constantes <n, σ >→n Variables <X, σ >→σ(X) Suma <a0, σ >→n <a1, σ >→m <a0+a1, σ >→n+m Resta <a0, σ >→n <a1, σ >→m <a0−a1, σ >→n−m Multiplicación <a0, σ >→n <a1, σ >→m <a0∗a1, σ >→n∗mEvaluación de expresiones booleanas
(I)Constantes
<true, σ >→true <false, σ >→false
Comparación aritmética <a0, σ >→n <a1, σ >→m <a0=a1, σ >→true n=m <a0, σ >→n <a1, σ >→m <a0=a1, σ >→false n6=m <a0, σ >→n <a1, σ >→m <a0<=a1, σ >→true n<=m <a0, σ >→n <a1, σ >→m <a0<=a1, σ >→false n>m
Evaluación de expresiones booleanas
(I)Constantes
<true, σ >→true <false, σ >→false
Comparación aritmética <a0, σ >→n <a1, σ >→m <a0=a1, σ >→true n=m <a0, σ >→n <a1, σ >→m <a0=a1, σ >→false n6=m <a0, σ >→n <a1, σ >→m <a0<=a1, σ >→true n<=m <a0, σ >→n <a1, σ >→m <a0<=a1, σ >→false n>m
Evaluación de expresiones booleanas
(II) Negación <b, σ >→true <notb, σ >→false <b, σ >→false <notb, σ >→true Conectivas lógicas <b0, σ >→t0 <b1, σ >→t1 <b0andb1, σ >→t t =t0∧t1 <b0, σ >→t0 <b1, σ >→t1 <b0orb1, σ >→t t =t0∨t1Evaluación de expresiones booleanas
(II) Negación <b, σ >→true <notb, σ >→false <b, σ >→false <notb, σ >→true Conectivas lógicas <b0, σ >→t0 <b1, σ >→t1 <b0andb1, σ >→t t =t0∧t1 <b0, σ >→t0 <b1, σ >→t1 <b0orb1, σ >→t t =t0∨t1Evaluación de
and
optimizada
Implementación habitual <b0, σ >→false <b0andb1, σ >→false <b0, σ >→true <b1, σ >→false <b0andb1, σ >→false <b0, σ >→true <b1, σ >→true <b0andb1, σ >→trueEjecución de instrucciones
(I) Skip <skip, σ >→σ Asignación <a, σ >→m <X :=a, σ >→σ[X ←m] Secuencia <c0, σ >→σ00 <c1, σ00>→σ0 <c0;c1, σ >→σ0Ejecución de instrucciones
(I) Skip <skip, σ >→σ Asignación <a, σ >→m <X :=a, σ >→σ[X ←m] Secuencia <c0, σ >→σ00 <c1, σ00>→σ0 <c0;c1, σ >→σ0Ejecución de instrucciones
(I) Skip <skip, σ >→σ Asignación <a, σ >→m <X :=a, σ >→σ[X ←m] Secuencia <c0, σ >→σ00 <c1, σ00>→σ0 <c0;c1, σ >→σ0Ejecución de instrucciones
(II) If <b, σ >→true <c0, σ >→σ0 <ifbthenc0elsec1fi, σ >→σ0 <b, σ >→false <c1, σ >→σ0 <ifbthenc0elsec1fi, σ >→σ0 While <b, σ >→false <whilebdocdone, σ >→σ <b, σ >→true <c, σ >→σ00 <whilebdocdone, σ00>→σ0 <whilebdoc done, σ >→σ0Ejecución de instrucciones
(II) If <b, σ >→true <c0, σ >→σ0 <ifbthenc0elsec1fi, σ >→σ0 <b, σ >→false <c1, σ >→σ0 <ifbthenc0elsec1fi, σ >→σ0 While <b, σ >→false <whilebdocdone, σ >→σ <b, σ >→true <c, σ >→σ00 <whilebdocdone, σ00>→σ0 <whilebdoc done, σ >→σ0Derivaciones
Derivación. Secuencia de aplicación de reglas. Axioma. Regla sin premisas.
Instancia de un regla. Sustituimos las metavariables por valores concretos.
Las derivaciones representan ejecuciones de las instrucciones o evaluaciones de las expresiones.
Ejemplo.a≡(X+5) + (7+9)yσ0={X ←0} ¿<a, σ0>? <X, σ0>→0 <5, σ0>→5 <(X+5), σ0>→5 <7, σ0>→7 <9, σ0>→9 <(7+9), σ0>→16 <(X+5) + (7+9), σ0>→21>
Terminación
Siw ≡while true do skip, ¿∀σ,∃σ0t.q. <w, σ >→σ0?
Preguntas
¿ Son iguales ? skip ∼ b := 1 > 2; x := 1; while b do x := x *2; b := x < 500; doneDespués de este código, ¿ X es par ? while x < 3000 do
x := x * 2; done
Relaciones de equivalencia
a0∼a1 iff (∀n∈ N,∀σ∈Σ, <a0, σ >→n⇐⇒<a1, σ >→n) b0∼b1 iff (∀t∀σ∈Σ, <b0, σ >→t⇐⇒<b1, σ >→t) c0∼c1 iff (∀σ, σ0∈Σ, <c0, σ >→σ0 ⇐⇒<c1, σ >→σ0)Prueba simple
Proposición
Seaw ≡whilebdoc doneconb∈Bexp,c∈Comm entonces:
w ∼ifbthenc;w else skip fi Demostración.
Inducción matemática
SeaP(n)una propiedad de los números naturales.
El principio de inducción matemática dice que para demostrar
queP(n)es cierto para todos los números naturales es
suficiente con demostrar que:
P(0)es cierto.
SiP(m)es cierto, entonces también lo esP(m+1), para cualquier número naturalm.
Es decir,
(P(0) & (∀m∈ω.P(m)⇒P(m+1)))⇒ ∀n∈ω.P(n) Ejercicio. Demostrar que la propiedad P(n) se cumple para los números naturales.
P(n) ⇐⇒ n X
i=1
Inducción estructural
¿ Cómo demostramos que la evaluación de expresiones aritméticas en IMP es determinista ?
<a, σ >→m & <a, σ >→m0 ⇒m=m0
SeaP(a)una propiedad de las expresiones aritméticas. Para demostrar que(P(a)se cumple para todas las expresiones artiméticas es suficiente con demostrar que:
Se cumple para todos los númeroP(m). Se cumple para todas la variablesP(X).
Para todas la expresiones aritméticasa0,a1, siP(a0)yP(a1) se cumplen, entonces también se cumpleP(a0+a1).
Para todas la expresiones aritméticasa0,a1, siP(a0)yP(a1) se cumplen, entonces también se cumpleP(a0−a1).
Para todas la expresiones aritméticasa0,a1, siP(a0)yP(a1) se cumplen, entonces también se cumpleP(a0×a1).
Inducción estructural
¿ Cómo demostramos que la evaluación de expresiones aritméticas en IMP es determinista ?
<a, σ >→m & <a, σ >→m0 ⇒m=m0
SeaP(a)una propiedad de las expresiones aritméticas.
Para demostrar que(P(a)se cumple para todas las
expresiones artiméticas es suficiente con demostrar que:
Se cumple para todos los númeroP(m). Se cumple para todas la variablesP(X).
Para todas la expresiones aritméticasa0,a1, siP(a0)yP(a1)
se cumplen, entonces también se cumpleP(a0+a1).
Para todas la expresiones aritméticasa0,a1, siP(a0)yP(a1)
se cumplen, entonces también se cumpleP(a0−a1).
Para todas la expresiones aritméticasa0,a1, siP(a0)yP(a1)
Inducción estructural
cont.(∀m∈N.P(m)) & (∀X ∈Loc.P(X))
& (∀a0,a1∈Aexp.P(a0)yP(a1)⇒P(a0+a1)) & (∀a0,a1∈Aexp.P(a0)yP(a1)⇒P(a0−a1)) & (∀a0,a1∈Aexp.P(a0)yP(a1)⇒P(a0∗a1))
Inducción estructural
cont.Proposición Para toda expresión aritméticaay númerosmym0
<a, σ >→m & <a, σ >→m0 ⇒m=m0
Inducción bien fundada
Las anteriores son casos particulares.
Relación bien fundada Es una relación binaria≺sobre un
conjuntoAtal que no hay cadenas descendientes infinitas · · · ≺ai≺ · · · ≺a1≺a0
Sia≺bdecimos queaes unpredecesordeb. Esirreflexiva.6 ∃a/a≺a
ab ⇐⇒ a=b o a≺b
Proposición Sea≺una relación binaria en el conjuntoA. La
relacion≺está bien fundada iff todos los
subconjuntos no vacíosQdeAtienen un elemento minimal, i.e. un elementomtal que
Inducción bien fundada
Las anteriores son casos particulares.
Relación bien fundada Es una relación binaria≺sobre un
conjuntoAtal que no hay cadenas descendientes
infinitas · · · ≺ai≺ · · · ≺a1≺a0
Sia≺bdecimos queaes unpredecesordeb.
Esirreflexiva.6 ∃a/a≺a ab ⇐⇒ a=b o a≺b
Proposición Sea≺una relación binaria en el conjuntoA. La
relacion≺está bien fundada iff todos los
subconjuntos no vacíosQdeAtienen un elemento minimal, i.e. un elementomtal que
Inducción bien fundada
Las anteriores son casos particulares.
Relación bien fundada Es una relación binaria≺sobre un
conjuntoAtal que no hay cadenas descendientes
infinitas · · · ≺ai≺ · · · ≺a1≺a0
Sia≺bdecimos queaes unpredecesordeb.
Esirreflexiva.6 ∃a/a≺a ab ⇐⇒ a=b o a≺b
Proposición Sea≺una relación binaria en el conjuntoA. La
relacion≺está bien fundada iff todos los
subconjuntos no vacíosQdeAtienen un elemento
minimal, i.e. un elementomtal que
Inducción bien fundada
(cont.) Demostración≺está bien fundada⇐m∈Q&∀b≺m.b6∈Q
Supongamos que todo conjunto no vacio deAtiene un elemento minimal. Si...≺ai ≺...≺a1≺a0es una cadena infinita
descendente, entonces el conjuntoQ={ai |i ∈w}sería no vacío
sin un elemento minimal. Por lo tanto≺está bien fundada.
≺está bien fundada⇒m∈Q&∀b≺m.b6∈Q
Suponer queQes un subconjunto no vacío deA. Construimos una cadena de elementos de esta forma: tomamos un elementoa0de Q. Inductivamente, asumimos que hemos construido enQuna cadena de elememntosan≺...≺a0. Si no existe unb∈Qt.q. b≺anparar la construcción. En caso contrario tomaran+1=b.
Como≺es bien fundada la cadena...≺ai ≺...≺a1...≺a0no
puede ser infinita. Si es finita, de la formaan≺...≺a0con
El principio de Inducción bien fundada
Sea≺una relacion bien fundada en un conjuntoA. SeaP
una propiedad. Entonces∀a∈A.P(a)iff:
∀a∈A.([∀b≺a.P(b)]⇒P(a)) Prueba
La prueba se basa en la observación de que cualquier subconjunto no vacíoQde un conjuntoAcon una relación bien fundada≺tiene un elemento minimal.
⇒ Trivial ⇐
Asumimos∀a∈A.([∀b≺a.P(b)]⇒P(a))y producimos una contradicción suponiendo que¬P(a)para algúna∈A. Entonces, tiene que existir un elemento minimalmpara el conjunto{a∈A| ¬P(a)}. Pero entonces¬P(m)y sin embargo∀b≺m.P(m), lo cual contradice la asumción.
El principio de Inducción bien fundada
Sea≺una relacion bien fundada en un conjuntoA. SeaP
una propiedad. Entonces∀a∈A.P(a)iff:
∀a∈A.([∀b≺a.P(b)]⇒P(a)) Prueba
La prueba se basa en la observación de que cualquier
subconjunto no vacíoQde un conjuntoAcon una relación
bien fundada≺tiene un elemento minimal.
⇒ Trivial ⇐
Asumimos∀a∈A.([∀b≺a.P(b)]⇒P(a))y producimos una contradicción suponiendo que¬P(a)para algúna∈A. Entonces, tiene que existir un elemento minimalmpara el conjunto{a∈A| ¬P(a)}. Pero entonces¬P(m)y sin embargo∀b≺m.P(m), lo cual contradice la asumción.
El principio de Inducción bien fundada
Sea≺una relacion bien fundada en un conjuntoA. SeaP
una propiedad. Entonces∀a∈A.P(a)iff:
∀a∈A.([∀b≺a.P(b)]⇒P(a)) Prueba
La prueba se basa en la observación de que cualquier
subconjunto no vacíoQde un conjuntoAcon una relación
bien fundada≺tiene un elemento minimal.
⇒ Trivial
⇐
Asumimos∀a∈A.([∀b≺a.P(b)]⇒P(a))y producimos una contradicción suponiendo que¬P(a)para algúna∈A. Entonces, tiene que existir un elemento minimalmpara el conjunto{a∈A| ¬P(a)}. Pero entonces¬P(m)y sin embargo∀b≺m.P(m), lo cual contradice la asumción.
El principio de Inducción bien fundada
Sea≺una relacion bien fundada en un conjuntoA. SeaP
una propiedad. Entonces∀a∈A.P(a)iff:
∀a∈A.([∀b≺a.P(b)]⇒P(a)) Prueba
La prueba se basa en la observación de que cualquier
subconjunto no vacíoQde un conjuntoAcon una relación
bien fundada≺tiene un elemento minimal.
⇒ Trivial ⇐
Asumimos∀a∈A.([∀b≺a.P(b)]⇒P(a))y producimos una contradicción suponiendo que¬P(a)para algúna∈A. Entonces, tiene que existir un elemento minimalmpara el conjunto{a∈A| ¬P(a)}. Pero entonces¬P(m)y sin embargo∀b≺m.P(m), lo cual contradice la asumción.
Ejemplos
Inducción matemática
n≺m ⇐⇒ m=n+1 Inducción estructural
Ejemplos
Inducción matemática
n≺m ⇐⇒ m=n+1 Inducción estructural
Ejercicio
Algoritmo de Euclides (máximo común divisor)
Euclid ≡ while (not (M = N)) do if (M <= N) then N := N - M; else M := M - N; fi done
Teorema (Terminación). Para todos los estadosσ
Ejercicio
Algoritmo de Euclides (máximo común divisor)
Euclid ≡ while (not (M = N)) do if (M <= N) then N := N - M; else M := M - N; fi done
Teorema (Terminación). Para todos los estadosσ
Ejercicio. Prueba
Deseamos probar que la propiedad
P(σ)⇔ ∃σ0. <Euclid, σ >→σ0
se cumple∀σ ∈S={σ∈Σ|σ(M)≥1&σ(N)≥1}
Usaremos inducción bien fundada sobre la relación:
σ‘≺σ iff (σ0(M)≤σ(M) & σ0(N)≤σ(N)) & (σ0(M)6=σ(M) o σ0(N)6=σ(N))
Ejercicio. Prueba
Deseamos probar que la propiedad
P(σ)⇔ ∃σ0. <Euclid, σ >→σ0
se cumple∀σ ∈S={σ∈Σ|σ(M)≥1&σ(N)≥1}
Usaremos inducción bien fundada sobre la relación:
σ‘≺σ iff (σ0(M)≤σ(M) & σ0(N)≤σ(N)) & (σ0(M)6=σ(M) o σ0(N)6=σ(N))