2017-02-09 7 views
3

Я установил Coquelicot поверх mathcomp/SSreflect.Библиотека Coquelicot для базового студенческого исчисления

Я хочу выполнить очень простой реальный анализ с ним, даже если я до сих пор не владею стандартным Coq.

Это моя первая лемма:

Definition fsquare (x : R) : R := x^2. 
Lemma deriv_x2 : forall y, is_derive (fsquare) y (2 * y). 

is_derive f x0 f' является Coquelicot Prop, который гласит, что производная функции f at x0 is f'.

Я уже доказал эту лемму благодаря тактике auto_derive, предоставленной Coquelicot.

Если я хочу, чтобы мои руки немного грязный, это моя попытка без auto_derive:

Lemma deriv_x2 : forall y, is_derive (fsquare) y (2 * y). 
Proof. 
    move => y. 
    unfold fsquare. 
    evar_last. 
    apply is_derive_pow. 
    apply is_derive_id. 
    simpl. 

А теперь я застрял с этим в ожидании суда:

1 subgoal 
y : R_AbsRing 
______________________________________(1/1) 
2 * one * (y * 1) = 2 * y 

Как решить Это ?

EDIT:

, если я позвоню ring, я получаю:

Error: Tactic failure: not a valid ring equation. 

если я раскрываться один, я получаю:

1 subgoal 
y : R_AbsRing 
______________________________________(1/1) 
2 * 
Ring.one 
    (AbelianGroup.Pack R_AbsRing (Ring.class R_AbsRing) R_AbsRing) 
    (Ring.class R_AbsRing) * (y * 1) = 2 * y 
+0

Возможно, вы захотите изучить [тактику кольца] (https://coq.inria.fr/refman/Reference-Manual028.html). – gallais

+0

@ gallais: Thx. полевая тактика не срабатывает на данном этапе. Полагаю, мне нужно избавиться от термина «один». Я пробовал разворачиваться, но это не очень хорошая идея, я боюсь. – FZed

+1

Вы пробовали «кольцо»? Здесь вам не нужна вся сила «поля». Для чего «разворачивается»? Я бы действительно ожидал, что было бы неплохо развернуть его. – gallais

ответ

4

Хорошо, что мне потребовалось некоторое время, для установки ssreflect & Coquelicot и найти соответствующие импортеры, но здесь мы идем.

Главное, что one действительно просто R1 под капотом, но simpl не достаточно агрессивны, чтобы показать, что: вам нужно использовать compute вместо этого. Когда у вас есть только исходные элементы в R и переменные, ring позаботится о цели.

Require Import Reals. 
Require Import Coquelicot.Coquelicot. 
Require Import mathcomp.ssreflect.ssreflect. 

Definition fsquare (x : R) : R := x^2. 

Lemma deriv_x2 : forall y, is_derive (fsquare) y (2 * y). 
Proof. 
    move => y. 
    unfold fsquare. 
    evar_last. 
    apply is_derive_pow. 
    apply is_derive_id. 
    compute. 
    ring. 
Qed. 
+0

OP уже знает 'auto_derive', но хочет, чтобы их« руки были немного грязными ». ;) – gallais

+0

Thx для ваших усилий по установке и анализу. Ценить это. Merci. – FZed

+0

Не беспокойтесь, @FZed. Я читал новую [SSRelect book] (https://math-comp.github.io/mcb/), так что теперь, когда я нашел хороший повод для установки всего, я мог бы попытаться решить упражнения. :) – gallais

 Смежные вопросы

  • Нет связанных вопросов^_^