conv
の中で apply
でターゲットを書き換える
#12
-
Lean 勉強会の analysis3 の 下記のように,apply を用いてターゲットを書き換えようとしました. theorem «0.9999999 = 1» : Real.ofCauchy (Quotient.mk CauSeq.equiv «0.9999999») = (1 : ℝ) := by
calc _ = Real.ofCauchy (Quotient.mk CauSeq.equiv (CauSeq.const abs 1)) := ?_
_ = (1 : ℝ) := Real.ofCauchy_one
rw [«0.9999999»]
congr 1
apply Quotient.sound
intro ε ε0
suffices ∃ i, ∀ (j : ℕ), j ≥ i → (10 ^ j : ℚ)⁻¹ < ε by simpa [abs]
-- ヒント: `pow_unbounded_of_one_lt`と`inv_lt_of_inv_lt`を使って、欲しい`i`を手に入れよう
-- 示すべき式を書き換える
conv =>
congr
intro i j hji
tactic =>
have h1: ε⁻¹ < 10 ^ j → (10 ^ j: ℚ)⁻¹ < ε := by
apply inv_lt_of_inv_lt
assumption
tactic =>
-- 下記の行がエラーになる
apply h1
sorry エラーになり,うまくいきません. tactic 'apply' failed, failed to unify
(10 ^ j)⁻¹ < ε
with
((10 ^ j)⁻¹ < ε) = ?m.35205 i j hji なぜうまくいかないのでしょうか?書き換え自体は, |
Beta Was this translation helpful? Give feedback.
Replies: 3 comments 4 replies
-
convに慣れていないので想像ですが、convの中に入ると、「ゴールを示す」ではなくて「項を書き換える」ことが目的になるはずです。( |
Beta Was this translation helpful? Give feedback.
-
@haruhisa-enomoto ありがとうございます。rw するには同値が必要ですが、数学的にはここで同値は必要ないはずなので、apply のようなことができてほしいです 他の書き方で実現できないか考えてみます |
Beta Was this translation helpful? Give feedback.
-
いかなる状況でも、ターゲットの部分項を ここで、例えば、
という本来証明不可能なゴールがあった場合、
に書き換えられることになります。 もちろんターゲットが含意命題の場合、その後件を十分条件によって書き換えるのは論理的に許される書き換えです。 結局、 |
Beta Was this translation helpful? Give feedback.
convに慣れていないので想像ですが、convの中に入ると、「ゴールを示す」ではなくて「項を書き換える」ことが目的になるはずです。(
⊢
じゃなくて|
になる)なので
| (10 ^ j)⁻¹ < ε
があってもapply
は使えず、書き換えのrw
しか通らないのだと思います。