Zulip Chat Archive

Stream: lean4

Topic: calc block error: Trying to understand invalidity


Oscar Matemb ⚛️ (Jul 08 2024 at 19:03):

import Mathlib

example {height weight parachute_resist net_resist acceleration time Svelocity : ℝ}
  (h1 : height = 300)
  (h2 : weight = 90)
  (h3 : parachute_resist = 875)
  (h4 : net_resist = (weight * 9.8) - parachute_resist)
  (h5 : acceleration = net_resist / weight)
  (h6 : time = (2 * height / acceleration)^(1/2))
  (h7 : Svelocity = acceleration * time) : Svelocity ≤ 7 ∧ time ≤ 100 :=
by
  -- Step-by-step calculations for time
  have ht : time = (2 * height / acceleration)^(1/2) := by rw [h6]
  have ha : acceleration = net_resist / weight := by rw [h5]
  have hn : net_resist = (weight * 9.8) - parachute_resist := by rw [h4]


  calc -- error at this block
    time = (2 * 300 / (net_resist / weight))^(1/2) := by rw [ht, h1, ha]
    _  = (2 * 300 / (((weight * 9.8) - parachute_resist) / weight))^(1/2) := by rw [hn]
    _  = (2 * 300 / (((90 * 9.8) - 875) / 90))^(1/2) := by rw [h2, h3]
    _  = (2 * 300 / ((882 - 875) / 90))^(1/2) := by norm_num
    _  = (2 * 300 / (7 / 90))^(1/2) := by norm_num
    _  = (2 * 300 * 90 / 7)^(1/2) := by rw [div_eq_mul_inv, mul_div_assoc]
    _  = (54000 / 7)^(1/2) := by norm_num
    _  = (7714.2857)^(1/2) := by norm_num
    _  = 87.83 := by norm_num
    _ ≤ 100 := by norm_num

  have hb : 87.83 ≤ 100 := by norm_num


  calc
    Svelocity = acceleration * time := by rw [h7]
   _  = (net_resist / weight) * (2 * height / acceleration)^(1/2) := by rw [ht, ha]
   _  = (net_resist / weight) * (2 * 300 / (net_resist / weight))^(1/2) := by rw [h1]
   _  = ((weight * 9.8) - parachute_resist) / 90 * (2 * 300 / (((weight * 9.8) - parachute_resist) / 90))^(1/2) := by rw [hn]
   _  = ((90 * 9.8) - 875) / 90 * (2 * 300 / (((90 * 9.8) - 875) / 90))^(1/2) := by rw [h2, h3]
   _  = 7 / 90 * (2 * 300 * 90 / 7)^(1/2) := by norm_num
   _  = 7 / 90 * (54000 / 7)^(1/2) := by rw [div_eq_mul_inv, mul_div_assoc]
   _  = 7 / 90 * 87.83 := by norm_num
   _  = 7 : by norm_num
   _  ≤ 7 : by norm_num

  have hs : _ ≤ 7 := by norm_num

  exact ⟨hs, hb⟩



```

Oscar Matemb ⚛️ (Jul 08 2024 at 19:12):

Oscar Matemb ⚛️ said:
``````-- error thrown at second calc block : invalid 'calc' step, failed to synthesize Trans instance Trans Eq And ?m.2269 use set_option diagnostics true` to get diagnostic information

import Mathlib

example {height weight parachute_resist net_resist acceleration time Svelocity : ℝ}
  (h1 : height = 300)
  (h2 : weight = 90)
  (h3 : parachute_resist = 875)
  (h4 : net_resist = (weight * 9.8) - parachute_resist)
  (h5 : acceleration = net_resist / weight)
  (h6 : time = (2 * height / acceleration)^(1/2))
  (h7 : Svelocity = acceleration * time) : Svelocity ≤ 7 ∧ time ≤ 100 :=
by
  -- Step-by-step calculations for time
  have ht : time = (2 * height / acceleration)^(1/2) := by rw [h6]
  have ha : acceleration = net_resist / weight := by rw [h5]
  have hn : net_resist = (weight * 9.8) - parachute_resist := by rw [h4]


  calc -- error at this block
    time = (2 * 300 / (net_resist / weight))^(1/2) := by rw [ht, h1, ha]
    ... = (2 * 300 / (((weight * 9.8) - parachute_resist) / weight))^(1/2) := by rw [hn]
    ... = (2 * 300 / (((90 * 9.8) - 875) / 90))^(1/2) := by rw [h2, h3]
    ... = (2 * 300 / ((882 - 875) / 90))^(1/2) := by norm_num
    ... = (2 * 300 / (7 / 90))^(1/2) := by norm_num
    ... = (2 * 300 * 90 / 7)^(1/2) := by rw [div_eq_mul_inv, mul_div_assoc]
    ... = (54000 / 7)^(1/2) := by norm_num
    ... = (7714.2857)^(1/2) := by norm_num
    ... = 87.83 := by norm_num
    ... ≤ 100 := by norm_num

  have hb : 87.83 ≤ 100 := by norm_num


  calc
    Svelocity = acceleration * time := by rw [h7]
   _  = (net_resist / weight) * (2 * height / acceleration)^(1/2) := by rw [ht, ha]
   _  = (net_resist / weight) * (2 * 300 / (net_resist / weight))^(1/2) := by rw [h1]
   _  = ((weight * 9.8) - parachute_resist) / 90 * (2 * 300 / (((weight * 9.8) - parachute_resist) / 90))^(1/2) := by rw [hn]
   _  = ((90 * 9.8) - 875) / 90 * (2 * 300 / (((90 * 9.8) - 875) / 90))^(1/2) := by rw [h2, h3]
   _  = 7 / 90 * (2 * 300 * 90 / 7)^(1/2) := by norm_num
   _  = 7 / 90 * (54000 / 7)^(1/2) := by rw [div_eq_mul_inv, mul_div_assoc]
   _  = 7 / 90 * 87.83 := by norm_num
   _  = 7 : by norm_num
   _  ≤ 7 : by norm_num

  have hs : _ ≤ 7 := by norm_num

  exact ⟨hs, hb⟩



```
```````

Kim Morrison (Jul 08 2024 at 19:27):

Replace all the ... with _. Perhaps you were copying syntax from something in Lean 3/?

Oscar Matemb ⚛️ (Jul 08 2024 at 20:13):

Kim Morrison said:

Replace all the ... with _. Perhaps you were copying syntax from something in Lean 3/?

oh yes, I sure did. It still threw the same error

Kevin Buzzard (Jul 08 2024 at 20:21):

If you add import Mathlib.Tactic then the only errors it throws to me are the ones which are obvious syntax errors (e.g. you write : instead of := in a couple of places, and the error message says exactly this). Edit: sorry, my mistake, I missed the error which you're talking about. Looking into it...

Kevin Buzzard (Jul 08 2024 at 20:36):

Right, the error makes sense: your goal is velocity ≤ 7 ∧ time ≤ 100 and the head symbol here is ∧ which doesn't make sense when using calc. You'll have to change the goal to an inequality before you can hope that calc works.

Oscar Matemb ⚛️ (Jul 08 2024 at 20:38):

Okay I understand.

Oscar Matemb ⚛️ (Jul 08 2024 at 20:38):

Thanks

Oscar Matemb ⚛️ (Jul 08 2024 at 20:40):

I was thinking ‘’’calc’’’ could be used to prove goals with ‘’’and’’’ as well

Oscar Matemb ⚛️ (Jul 08 2024 at 20:46):

Do you think ‘obtain’ could work

Oscar Matemb ⚛️ (Jul 08 2024 at 20:46):

?

Oscar Matemb ⚛️ (Jul 08 2024 at 20:46):

Do you think ‘obtain’ could work

Damiano Testa (Jul 08 2024 at 20:48):

constructor should work.

Oscar Matemb ⚛️ (Jul 08 2024 at 20:49):

Could you please write it out? I’m not sure where’d it may be placed

Ruben Van de Velde (Jul 08 2024 at 20:53):

After the first by, perhaps

Damiano Testa (Jul 08 2024 at 20:53):

I'm not at a computer, but if your goal is ... ∧ ..., then constructor will create two goals.

Oscar Matemb ⚛️ (Jul 08 2024 at 20:53):

Oh yes, I figured. Thank you!


Last updated: Feb 28 2026 at 14:05 UTC