This PR changes the naming of the internal functions in deriving instances like BEq to use accessible names. This is necessary to reasonably easily prove things about these functions. For example after `deriving BEq` for a type `T`, the implementation of `instBEqT` is in `instBEqT.beq`.
49 lines
1.1 KiB
Text
49 lines
1.1 KiB
Text
module
|
||
|
||
inductive Vec (α : Type u) : Nat → Type u
|
||
| nil : Vec α 0
|
||
| cons : α → {n : Nat} → Vec α n → Vec α (n+1)
|
||
deriving DecidableEq
|
||
|
||
inductive Test (α : Type)
|
||
| mk₀
|
||
| mk₁ : (n : Nat) → (α × α) → List α → Vec α n → Test α
|
||
| mk₂ : Test α → α → Test α
|
||
deriving DecidableEq
|
||
|
||
def t1 [DecidableEq α] : DecidableEq (Vec α n) :=
|
||
inferInstance
|
||
|
||
def t2 [DecidableEq α] : DecidableEq (Test α) :=
|
||
inferInstance
|
||
|
||
/-! Public structures should yield public instances independent of `public section`. -/
|
||
|
||
public inductive PubEnum where
|
||
| a | b
|
||
deriving DecidableEq
|
||
|
||
/-- info: decide (PubEnum.b = PubEnum.b) : Bool -/
|
||
#guard_msgs in
|
||
#with_exporting
|
||
#check decide (PubEnum.b = PubEnum.b)
|
||
|
||
public inductive PubInd where
|
||
| a (n : Nat) | b
|
||
deriving DecidableEq
|
||
|
||
/--
|
||
info: Decidable.rec (fun h => false) (fun h => true) (instDecidableEqPubInd.decEq PubInd.b PubInd.b)
|
||
-/
|
||
#guard_msgs in
|
||
#with_exporting
|
||
#reduce decide (PubInd.b = PubInd.b)
|
||
|
||
public inductive PubExpInd where
|
||
| a (n : Nat) | b
|
||
deriving @[expose] DecidableEq
|
||
|
||
/-- info: true -/
|
||
#guard_msgs in
|
||
#with_exporting
|
||
#reduce decide (PubExpInd.b = PubExpInd.b)
|