And P Q
tiene un solo constructor, llamado And.intro
.inductive And (P Q : Prop) : Prop
| intro : P → Q → And P Q
Es decir que, formalmente, definir una proposición no es nada distinto a definir un tipo.
Estamos empezando a ver que las proposiciones se comportan como tipos, con funciones entre esos tipos para representar implicaciones:
inductive False : Prop
El principio de inducción asociado a
def cons_imp_classical {P Q : Prop} : (P → Q) → ¬(P ∧ ¬Q) :=
fun (f : P → Q) ↦ fun (And.intro (p : P) (g : Q → False)) ↦ g (f p)
Or.inl
y Or.inr
).inductive Or (P Q : Prop) : Prop
| inl : P → Or P Q
| inr : Q → Or P Q
inductive Iff (P Q : Prop) : Prop
| intro : (P → Q) → (Q → P) → Iff P Q
structure
).structure Iff (P Q : Prop) : Prop where
intro :: (mp : P → Q) (mpr : Q → P)
Las tácticas básicas que necesitamos son las siguientes:
exact
apply
intro
revert
constructor
rcases
(y cases
)left
y right
rfl
Todas estas tácticas están presentadas en el archivo que acompaña esta clase.
Usemos el modo táctico para probar la regla del modus ponens. El punto es ver cómo el estado de la prueba y el objetivo van cambiando después de cada uso de una táctica, hasta que el objetivo se cierre.
theorem mp {P Q : Prop} : (P → Q) ∧ P → Q := by -- el objetivo es `(P → Q) ∧ P → Q`
intro h
-- se introduce un término de tipo `(P → Q) ∧ P` en el contexto local (nuevo objetivo: `Q`)
rcases h with ⟨f, p⟩ -- se parte `h` en `f : P → Q` y `p : P` (el objetivo aún es `Q`)
exact f p -- se construye un término `f p : Q`, lo cual resulta en unificación
Para comparar, la prueba en modo término sería más o menos igual de larga, pero en el modo término el infoview no muestra nada, salvo la ausencia de un mensaje de error.
theorem mp {P Q : Prop} : (P → Q) ∧ P → Q :=
fun (And.intro (f : P → Q) (p : P)) ↦ f p
Una tautología es una proposición que se construye a partir de otras y que tiene una prueba independientemente de si las anteriores tienen una prueba. Probar tales proposiciones ayuda a familiarizarse con las tácticas básicas. ¿Podrían enunciar y probar las siguientes?