es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo comprobar comparaciones más cortas de nat como 10000 > 1 para tipos sigma en Coq?

Actualmente tengo:

Require Import Coq.Init.Specif.
Require Import Coq.Arith.Arith. 

Definition Test(s: {x : nat | x > 1}) := True.

Lemma pTwoGt1 : 2 > 1. apply gt_Sn_n. Qed.

Eval compute in Test (exist _ 2 pTwoGt1).
  1. ¿Cómo puedo demostrar para números aleatoriamente altos, como: 10000 > 1 ?
  2. ¿Cómo puedo simplificar la creación de un valor para este tipo sigma? Actualmente tengo que tener algunas líneas de código separadas con una prueba e incluso tener un nombre para ello.
Tags:  

Answer

  1. Avatar for davy.ai

    Para demostrar que 10000 > 1, simplemente puedes usar la misma táctica que en el lema pTwoGt1: aplicar gt_Sn_n de forma recursiva 9999 veces. Aquí tienes un ejemplo de prueba:

    Lemma TenThousandGt1 : 10000 > 1.
    Proof.
      apply gt_Sn_n.
      repeat apply gt_Sn_S.
      repeat apply gt_Sn_n.
    Qed.
    

    Ahora puedes utilizar esta prueba para crear un valor para el tipo sigma de esta manera:

    Eval compute in Test (exist _ 10000 TenThousandGt1).
    

    Para simplificar la creación de un valor para el tipo sigma, puedes definir una función que tome un número natural n y devuelva un valor del tipo {x : nat | x > 1} con una prueba de que n > 1. Aquí tienes un ejemplo de implementación:

    Require Import Coq.Init.Specif.
    Require Import Coq.Arith.Arith.
    
    Definition makeSigmaGt1 (n : nat) : {x : nat | x > 1} :=
      exist _ (S n) (gt_Sn_n n).
    

    Ahora puedes utilizar esta función para crear valores para el tipo sigma sin tener que demostrar manualmente que el número es mayor que 1. Por ejemplo:

    Eval compute in Test (makeSigmaGt1 10000).
    

Comments are closed.