| /- | |
| Copyright (c) 2020 Microsoft Corporation. All rights reserved. | |
| Released under Apache 2.0 license as described in the file LICENSE. | |
| Authors: Leonardo de Moura, Mario Carneiro | |
| -/ | |
| prelude | |
| import Init.Tactics | |
| /-- | |
| Set an element in an array, using a proof that the index is in bounds. | |
| (This proof can usually be omitted, and will be synthesized automatically.) | |
| This will perform the update destructively provided that `a` has a reference | |
| count of 1 when called. | |
| -/ | |
| @[extern "lean_array_fset"] | |
| def Array.set (a : Array α) (i : @& Nat) (v : α) (h : i < a.size := by get_elem_tactic) : | |
| Array α where | |
| toList := a.toList.set i v | |
| /-- | |
| Set an element in an array, or do nothing if the index is out of bounds. | |
| This will perform the update destructively provided that `a` has a reference | |
| count of 1 when called. | |
| -/ | |
| @[inline] def Array.setIfInBounds (a : Array α) (i : Nat) (v : α) : Array α := | |
| dite (LT.lt i a.size) (fun h => a.set i v h) (fun _ => a) | |
| @[deprecated Array.setIfInBounds (since := "2024-11-24")] abbrev Array.setD := @Array.setIfInBounds | |
| /-- | |
| Set an element in an array, or panic if the index is out of bounds. | |
| This will perform the update destructively provided that `a` has a reference | |
| count of 1 when called. | |
| -/ | |
| @[extern "lean_array_set"] | |
| def Array.set! (a : Array α) (i : @& Nat) (v : α) : Array α := | |
| Array.setIfInBounds a i v |