在重写下存在

时间:2017-12-04 14:36:08

标签: coq

说我有以下关系:

Inductive my_relation: nat -> Prop :=
constr n: my_relation n.

我想证明以下内容:

Lemma example:
  (forall n, my_relation n -> my_relation (S n)) -> (exists n, my_relation n) -> exists n, my_relation (S n).
Proof.
  intros.

介绍之后,我有以下环境:

1 subgoal
H : forall n : nat, my_relation n -> my_relation (S n)
H0 : exists n : nat, my_relation n
______________________________________(1/1)
exists n : nat, my_relation (S n)

我的问题是:是否有可能在存在量词下重写H?如果没有,是否有解决此类问题的策略(这个特定的问题不是真正相关,而是您需要使用另一个exists证明exists的问题,以及非正式地,您可以«推论»一种将假设中的exists重写为目标中的exists的方法?

例如,如果我尝试rewrite H in H0.我有错误(Error: Cannot find a relation to rewrite.)。

2 个答案:

答案 0 :(得分:4)

在假设中操纵存在量化的标准方法是使用destruct或更好更简单的destruct H0 as (n, H0). destruct H0 as [n H0]. destruct H0 as (n & H0). 来证明该属性。

您可以使用以下语法之一为变量命名:

intros H (n & H0).

请注意,您还可以使用intro-patterns破坏一个假设。

H

您甚至可以直接在H0中应用intros H (n & H0%H). exists n. assumption.

$("#mainTable").dataTable();

/* CREATE TABLE FITURE */
$('.submitButton').click(function() {
  function getTableList() {
    var addTable = '<div class="tab-pane" id="folder' + localStorage.Index + '">' +
      '<div class="zf-table">' +
      '<table id="table' + localStorage.Index + '" class="table table-bordered table-hover myFade">' +
      '<thead>' +
      '<tr>' +
      '<th style="border-color:rgb(221, 221, 221);"></th>' +
      '<th>Audience Name</th>' +
      '<th>Type</th>' +
      '<th>Size</th>' +
      '<th>Date Created</th>' +
      '<th>Action</th>' +
      '</tr>' +
      '</thead>' +
      '</table>' +
      '</div>' +
      '</div>';
    return addTable;
  }

  if (true) {
    /** INDEX FOR INCREMENT ID **/
    if (typeof(Storage) !== "undefined") {
      if (localStorage.Index) {
        localStorage.Index = Number(localStorage.Index) + 1;
      } else {
        localStorage.Index = 1;
      }
    } // if storage

    var resultTable = JSON.parse(localStorage.getItem("tableList"));
    if (resultTable == null) {
      resultTable = [];
    }
    let newtableHTML = getTableList();
    resultTable.push({
      table: newtableHTML
    });
    // save the new resultTable array
    localStorage.setItem("tableList", JSON.stringify(resultTable));

    /* append Table baru */
    $('.tab-content').append(newtableHTML);
    var newTable = $("#table" + localStorage.Index).dataTable();
    alert("sucess create table");

  } else {
    alert("Failed create Table");
  }
}); // submitButton func

//on init fill the table-content

var resultTable = JSON.parse(localStorage.getItem("tableList"));
if (resultTable != null) {
  //get the nav reference in DOM
  let tableContent = $(".tab-content");

  //clear the html contents
  tableContent.html('');

  for (var i = 0; i < resultTable.length; i++) {
    var items = resultTable[i];
    $(".tab-content").append(items.table);
  }
} else {
  let inititalTable = [];
  inititalTable.push({
    table: $('div.tab-content').html()
  });
  localStorage.setItem("tableList", JSON.stringify(inititalTable));
}

Software Foundations以清晰的方式解释了这一点。

答案 1 :(得分:1)

我找到了一种方法,我将在此处发布任何类似的问题。

可以反转exists假设,以便实例化&#34;例如,量化变量,证明可以通过以下方式完成:

  inversion H0.
  apply H in H1.
  exists x.
  apply H1.
Qed.

inversion H0之后,我们在环境中:

1 subgoal
H : forall n : nat, my_relation n -> my_relation (S n)
H0 : exists n : nat, my_relation n
x : nat
H1 : my_relation x
______________________________________(1/1)
exists n : nat, my_relation (S n)

我们现在可以使用x