Skip to content

Commit e3d870e

Browse files
committed
Improved semantics definitions
* These no longer require a validity argument, which helps prevent dragging in extra validity terms to grind * Some general tidying of grind patterns/explicitly providing well formedness arguments seems to reduce grind pattern mess and improve elab time
1 parent ea2ae5c commit e3d870e

2 files changed

Lines changed: 189 additions & 143 deletions

File tree

Valaig/Aig/Basic.lean

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -305,16 +305,35 @@ private theorem get_eq_getElem_decls_and {var : Var} (valid : var.validIn aig)
305305
aig.aig.decls[var.idx]'valid = .gate rhs0.toFanin rhs1.toFanin := by
306306
grind [get_eq_getElem_decls valid]
307307

308-
@[always_inline, expose, reducible, grind unfold]
308+
@[always_inline, expose, reducible]
309309
instance instGetElemVar : GetElem Aig Var Node (fun aig var => var.validIn aig) where
310310
getElem aig var (h := by grind) :=
311311
aig.get var h
312312

313-
@[simp]
313+
@[simp, grind =]
314314
theorem getElem_eq_get {var : Var} (valid : var.validIn aig) :
315315
aig[var]'valid = aig.get var valid := by
316316
rfl
317317

318+
@[simp, grind =]
319+
theorem getElem?_eq {var : Var} :
320+
aig[var]? =
321+
if h : var.validIn aig then
322+
some aig[var]
323+
else
324+
none := by
325+
split
326+
· rw [getElem?_eq_some_getElem_iff]
327+
trivial
328+
· grind
329+
330+
@[simp]
331+
theorem validIn_of_getElem?_some {var : Var} {node : Node} (h : aig[var]? = some node) :
332+
var.validIn aig := by
333+
grind
334+
335+
grind_pattern validIn_of_getElem?_some => aig[var]?, some node, var.validIn aig
336+
318337
/-
319338
Input accessors.
320339
-/

0 commit comments

Comments
 (0)