This PR reviews the implicitness of arguments across List/Array/Vector, generally trying to make arguments implicit where possible, although sometimes correcting propositional arguments which were incorrectly implicit to explicit.
28 lines
935 B
Text
28 lines
935 B
Text
set_option grind.warning false
|
||
|
||
example (as bs cs : Array α) (v : α)
|
||
(i : Nat)
|
||
(h₁ : i < as.size)
|
||
(h₂ : bs = as.set i v)
|
||
(h₃ : cs = bs)
|
||
(h₄ : i ≠ j)
|
||
(h₅ : j < cs.size)
|
||
(h₆ : j < as.size)
|
||
: cs[j] = as[j] := by
|
||
skip
|
||
grind only [= Array.getElem_set_ne, = Array.size_set] -- works
|
||
|
||
theorem Array.getElem_set_ne_abstracted (xs : Array α) (i : Nat) (h' : i < xs.size) (v : α) {j : Nat}
|
||
(pj : j < xs.size) (h : i ≠ j) :
|
||
(xs.set i v)[j]'(by as_aux_lemma => simp [*]) = xs[j] := Array.getElem_set_ne h' pj h
|
||
|
||
example (as bs cs : Array α) (v : α)
|
||
(i : Nat)
|
||
(h₁ : i < as.size)
|
||
(h₂ : bs = as.set i v)
|
||
(h₃ : cs = bs)
|
||
(h₄ : i ≠ j)
|
||
(h₅ : j < cs.size)
|
||
(h₆ : j < as.size)
|
||
: cs[j] = as[j] := by
|
||
grind only [= Array.getElem_set_ne_abstracted, = Array.size_set] -- should work
|