Upload
others
View
9
Download
0
Embed Size (px)
Citation preview
PVS: Aritmetica e induccion
Francisco J. Martın Mateos
Jose A. Alonso Jimenez
Dpto. Ciencias de la Computacion e Inteligencia ArtificialUniversidad de Sevilla
Razonamiento Automatico – 2008/2009 PVS: Aritmetica e induccion
Aritmetica
Elementos predefinidos
Tipos numericos: real, rat, int y nat
Operaciones: +, -, * y /
Relaciones: =, <, <=, > y >=
Tacticas aritmeticas
(assert :linear? t): Procedimiento basico de decision
artimetica
Razonamiento Automatico – 2008/2009 PVS: Aritmetica e induccion
Demostraciones aritmeticas
Teorıa PVS
aritmetica: THEORY
BEGIN
x,y,z: VAR realf: [real -> real]g: [real, real -> real]
ejemplo1: THEOREMx < 2*y AND y < 3*z IMPLIES 3*x < 18*z
ejemplo2: THEOREMx = f(y) IMPLIES
g(f(y + 2 - 2), x + 2) = g(x, f(y) + 2)
ejemplo3: THEOREMx<0 AND y<0 IMPLIES x*y>0
END aritmetica
Razonamiento Automatico – 2008/2009 PVS: Aritmetica e induccion
Demostraciones aritmeticas
La tactica assert
ejemplo1 :
|-------{1} FORALL (x, y, z: real):
x < 2 * y AND y < 3 * z IMPLIES 3 * x < 18 * z
Rule? (skosimp)Skolemizing and flattening,this simplifies to:ejemplo1 :
{-1} x!1 < 2 * y!1{-2} y!1 < 3 * z!1
|-------{1} 3 * x!1 < 18 * z!1
Rule? (assert :linear? t)Simplifying, rewriting, and recording with decision procedures,Q.E.D.
Razonamiento Automatico – 2008/2009 PVS: Aritmetica e induccion
Demostraciones aritmeticas
La tactica assert
ejemplo2 :
|-------{1} FORALL (x, y: real):
x = f(y) IMPLIES g(f(y + 2 - 2), x + 2) = g(x, f(y) + 2)
Rule? (skosimp)Skolemizing and flattening,this simplifies to:ejemplo2 :
{-1} x!1 = f(y!1)|-------
{1} g(f(y!1 + 2 - 2), x!1 + 2) = g(x!1, f(y!1) + 2)
Rule? (assert :linear? t)Simplifying, rewriting, and recording with decision procedures,Q.E.D.
Razonamiento Automatico – 2008/2009 PVS: Aritmetica e induccion
Demostraciones aritmeticas
La tactica assert
ejemplo3 :
|-------{1} FORALL (x, y: real): x < 0 AND y < 0 IMPLIES x * y > 0
Rule? (skosimp)Skolemizing and flattening,this simplifies to:ejemplo3 :
{-1} x!1 < 0{-2} y!1 < 0
|-------{1} x!1 * y!1 > 0
Rule?
Razonamiento Automatico – 2008/2009 PVS: Aritmetica e induccion
Demostraciones aritmeticas
La tactica assert
ejemplo3 :
{-1} x!1 < 0{-2} y!1 < 0
|-------{1} x!1 * y!1 > 0
Rule? (assert :linear? t)Simplifying, rewriting, and recording with decision procedures,this simplifies to:ejemplo3 :
[-1] x!1 < 0[-2] y!1 < 0
|-------[1] x!1 * y!1 > 0
Rule?
El procedimiento de decision aritmetico no es completo
Razonamiento Automatico – 2008/2009 PVS: Aritmetica e induccion
Tacticas sobre definiciones y lemas
expand: Expande la definicion de una funcion, indicando el
sımbolo de funcion cuya definicion se quiere expandir, la
formula en la que se quiere expandir y la ocurrencia dentro de
la misma
lemma: Introduce una instancia de un lema como una nueva
formula en el secuente
use: Uso de lemma seguido de inst?
rewrite: Simplifica una formula del secuente reescribiendola
usando un lema
Razonamiento Automatico – 2008/2009 PVS: Aritmetica e induccion
Demostraciones con uso de definiones y lemas
Teorıa PVS
cuadrado : THEORY
BEGIN
x: VAR natid: nat
identidad: AXIOMx * id = x
cuadrado(x): nat =x * x
cuadrado_de_la_identidad: LEMMAcuadrado(id) = id
END cuadrado
Razonamiento Automatico – 2008/2009 PVS: Aritmetica e induccion
Demostraciones con uso de definiones y lemas
La tactica expand
cuadrado_de_la_identidad :
|-------{1} cuadrado(id) = id
Rule? (expand "cuadrado")Expanding the definition of cuadrado,this simplifies to:cuadrado_de_la_identidad :
|-------{1} id * id = id
Rule?
Razonamiento Automatico – 2008/2009 PVS: Aritmetica e induccion
Demostraciones con uso de definiones y lemas
La tactica lemma
cuadrado_de_la_identidad :
|-------{1} id * id = id
Rule? (lemma "identidad")Applying identidadthis simplifies to:cuadrado_de_la_identidad :
{-1} FORALL (x: nat): x * id = x|-------
[1] id * id = id
Rule? (inst?)Found substitution:x: nat gets id,Using template: x * id = xInstantiating quantified variables,Q.E.D.
Razonamiento Automatico – 2008/2009 PVS: Aritmetica e induccion
Demostraciones con uso de definiones y lemas
La tactica use
cuadrado_de_la_identidad :
|-------{1} id * id = id
Rule? (use "identidad")Using lemma identidad,Q.E.D.
Razonamiento Automatico – 2008/2009 PVS: Aritmetica e induccion
Demostraciones con uso de definiones y lemas
La tactica rewrite
cuadrado_de_la_identidad :
|-------{1} id * id = id
Rule? (rewrite "identidad")Found matching substitution:x: nat gets id,Rewriting using identidad, matching in *,Q.E.D.
Razonamiento Automatico – 2008/2009 PVS: Aritmetica e induccion
Definicion de funciones
Teorıa PVS
sumaPrimeros: THEORY
BEGIN
n:VAR nat
frac(n): nat = (n * (n+1))/2
suma(n): RECURSIVE nat =IF n=0 THEN 0
ELSE n+suma(n-1)ENDIFMEASURE n
END sumaPrimeros
Razonamiento Automatico – 2008/2009 PVS: Aritmetica e induccion
Tacticas empleadas
induct: Utilizar el esquema de induccion asociado a un tipo
de dato
induct-and-simplify: Utilizar el esquema de induccion
asociado a un tipo de dato, expansion de las funciones
relevantes y reescritura
Esquema de induccion asociado a los numeros naturales
P(0) ∀i (P(i) → P(i + 1))
∀n P(n)[NatInduct]
Razonamiento Automatico – 2008/2009 PVS: Aritmetica e induccion
Demostracion aritmetica con induccion
Teorema:i=n∑
i=0
i =n(n + 1)
2
Ampliacion de la teorıa PVS
sumaPrimeros: THEORY
BEGIN...
fla_suma: LEMMAsuma(n) = frac(n)
END sumaPrimeros
Razonamiento Automatico – 2008/2009 PVS: Aritmetica e induccion
Demostracion aritmetica con induccion
La tactica induct
fla_suma :
|-------{1} FORALL (n: nat): suma(n) = frac(n)
Rule? (induct "n")Inducting on n on formula 1,this yields 2 subgoals:fla_suma.1 :
|-------{1} suma(0) = frac(0)
Rule?
Razonamiento Automatico – 2008/2009 PVS: Aritmetica e induccion
Demostracion aritmetica con induccion
La tactica expand
fla_suma.1 :
|-------{1} suma(0) = frac(0)
Rule? (expand "suma")Expanding the definition of suma,this simplifies to:fla_suma.1 :
|-------{1} 0 = frac(0)
Rule?
Razonamiento Automatico – 2008/2009 PVS: Aritmetica e induccion
Demostracion aritmetica con induccion
La tactica expand
fla_suma.1 :
|-------{1} 0 = frac(0)
Rule? (expand "frac")Expanding the definition of frac,this simplifies to:fla_suma.1 :
|-------{1} 0 = 0 / 2
Rule? (assert :linear? t)Simplifying, rewriting, and recording with decision procedures,
This completes the proof of fla_suma.1.
Razonamiento Automatico – 2008/2009 PVS: Aritmetica e induccion
Demostracion aritmetica con induccion
La tactica induct
fla_suma.2 :
|-------{1} FORALL j:
suma(j) = frac(j) IMPLIES suma(j + 1) = frac(j + 1)
Rule? (skosimp)Skolemizing and flattening,this simplifies to:fla_suma.2 :
{-1} suma(j!1) = frac(j!1)|-------
{1} suma(j!1 + 1) = frac(j!1 + 1)
Rule?
Razonamiento Automatico – 2008/2009 PVS: Aritmetica e induccion
Demostracion aritmetica con induccion
La tactica expand
fla_suma.2 :
{-1} suma(j!1) = frac(j!1)|-------
{1} suma(j!1 + 1) = frac(j!1 + 1)
Rule? (expand "suma" 1)Expanding the definition of suma,this simplifies to:fla_suma.2 :
[-1] suma(j!1) = frac(j!1)|-------
{1} 1 + suma(j!1) + j!1 = frac(1 + j!1)
Rule?
Razonamiento Automatico – 2008/2009 PVS: Aritmetica e induccion
Demostracion aritmetica con induccion
La tactica replace
fla_suma.2 :
[-1] suma(j!1) = frac(j!1)|-------
{1} 1 + suma(j!1) + j!1 = frac(1 + j!1)
Rule? (replace -1)Replacing using formula -1,this simplifies to:fla_suma.2 :
[-1] suma(j!1) = frac(j!1)|-------
{1} 1 + frac(j!1) + j!1 = frac(1 + j!1)
Rule?
Razonamiento Automatico – 2008/2009 PVS: Aritmetica e induccion
Demostracion aritmetica con induccion
La tactica expand
fla_suma.2 :
[-1] suma(j!1) = frac(j!1)|-------
{1} 1 + frac(j!1) + j!1 = frac(1 + j!1)
Rule? (expand "frac" 1 2)Expanding the definition of frac,this simplifies to:fla_suma.2 :
[-1] suma(j!1) = frac(j!1)|-------
{1} 1 + frac(j!1) + j!1 = (2 + j!1 + (j!1 * j!1 + 2 * j!1)) / 2
Rule?
Razonamiento Automatico – 2008/2009 PVS: Aritmetica e induccion
Demostracion aritmetica con induccion
La tactica induct
fla_suma.2 :
[-1] suma(j!1) = frac(j!1)|-------
{1} 1 + frac(j!1) + j!1 = (2 + j!1 + (j!1 * j!1 + 2 * j!1)) / 2
Rule? (expand "frac" 1)Expanding the definition of frac,this simplifies to:fla_suma.2 :
[-1] suma(j!1) = frac(j!1)|-------
{1} 1 + (j!1 * j!1 + j!1) / 2 + j!1 =(2 + j!1 + (j!1 * j!1 + 2 * j!1)) / 2
Rule? (assert :linear? t)Simplifying, rewriting, and recording with decision procedures,
This completes the proof of fla_suma.2.
Q.E.D.
Razonamiento Automatico – 2008/2009 PVS: Aritmetica e induccion
Demostracion aritmetica con induccion
La tactica induct-and-simplify
fla_suma :
|-------{1} FORALL (n: nat): suma(n) = frac(n)
Rule? (induct-and-simplify "n")suma rewrites suma(0)
to 0frac rewrites frac(0)
to 0 / 2frac rewrites frac(j!1)
to (j!1 * j!1 + j!1) / 2suma rewrites suma(1 + j!1)
to 1 + suma(j!1) + j!1frac rewrites frac(1 + j!1)
to (2 + j!1 + (j!1 * j!1 + 2 * j!1)) / 2By induction on n, and by repeatedly rewriting and simplifying,Q.E.D.
Razonamiento Automatico – 2008/2009 PVS: Aritmetica e induccion
El problema de las monedas
Enunciado: Demostrar que con monedas de 3 y 5 se puede
obtener cualquier cantidad que sea mayor o igual a 8.
Especificacion
monedas : THEORY
BEGIN
n, a, b: VAR nat
monedas: LEMMAFORALL n: (EXISTS a, b: n+8 = 3*a + 5*b)
END monedas
Razonamiento Automatico – 2008/2009 PVS: Aritmetica e induccion
El problema de las monedas
Demostracion manual: Por induccion en n
Base (n = 0): 0 + 8 = 3 × 1 + 5 × 1Basta elegir a = b = 1Paso (n + 1):Supongamos que existen a y b tales que
n + 8 = 3 × a + 5 × b. Vamos a distinguir dos casos segun
el valor de b.
Caso 1: b = 0
En este caso n + 8 = 3 × a, a > 3 y
(n + 1) + 8 = 3 × (a − 3) + 5 × 2
Basta elegir a − 3 y 2 Caso 2:b 6= 0
En este caso (n + 1) + 8 = 3 × (a + 2) + 5 × (b − 1)
Basta elegir a + 2 y b − 1
Ejercicio: Reproducir esta prueba en PVS
Razonamiento Automatico – 2008/2009 PVS: Aritmetica e induccion