MData
tag for expressions that are proofs.
Equations
- Aesop.mdataPINFIsProofName = `Aesop.pinfIsProof
Instances For
Modify d
to indicate that the enclosed expression is a proof.
Equations
Instances For
Check whether d
indicates that the enclosed expression is a proof.
Equations
Instances For
Check whether two expressions in PINF are equal. We assume that the two expressions are type-correct, in PINF and have defeq types.
Equations
- Aesop.pinfEqCore (Lean.Expr.bvar i₁) (Lean.Expr.bvar i₂) = (i₁ == i₂)
- Aesop.pinfEqCore (Lean.Expr.fvar id₁) (Lean.Expr.fvar id₂) = (id₁ == id₂)
- Aesop.pinfEqCore (Lean.Expr.mvar id₁) (Lean.Expr.mvar id₂) = (id₁ == id₂)
- Aesop.pinfEqCore (Lean.Expr.sort u) (Lean.Expr.sort v) = (u == v)
- Aesop.pinfEqCore (Lean.Expr.const n₁ us) (Lean.Expr.const n₂ vs) = (n₁ == n₂ && us == vs)
- Aesop.pinfEqCore (f₁.app e₁) (f₂.app e₂) = (Aesop.pinfEq f₁ f₂ && Aesop.pinfEq e₁ e₂)
- Aesop.pinfEqCore (Lean.Expr.lam binderName t₁ e₁ bi₁) (Lean.Expr.lam binderName_1 t₂ e₂ bi₂) = (bi₁ == bi₂ && Aesop.pinfEq t₁ t₂ && Aesop.pinfEq e₁ e₂)
- Aesop.pinfEqCore (Lean.Expr.forallE binderName t₁ e₁ bi₁) (Lean.Expr.forallE binderName_1 t₂ e₂ bi₂) = (bi₁ == bi₂ && Aesop.pinfEq t₁ t₂ && Aesop.pinfEq e₁ e₂)
- Aesop.pinfEqCore (Lean.Expr.letE declName t₁ v₁ e₁ nonDep) (Lean.Expr.letE declName_1 t₂ v₂ e₂ nonDep_1) = (Aesop.pinfEq v₁ v₂ && Aesop.pinfEq t₁ t₂ && Aesop.pinfEq e₁ e₂)
- Aesop.pinfEqCore (Lean.Expr.lit l₁) (Lean.Expr.lit l₂) = (l₁ == l₂)
- Aesop.pinfEqCore (Lean.Expr.mdata d e₁) x✝ = (Aesop.mdataIsProof d || Aesop.pinfEq e₁ x✝)
- Aesop.pinfEqCore x✝ (Lean.Expr.mdata d e₂) = (Aesop.mdataIsProof d || Aesop.pinfEq x✝ e₂)
- Aesop.pinfEqCore x✝¹ x✝ = false
Instances For
Check whether two expressions in PINF are equal. We assume that the two expressions are type-correct, in PINF and have defeq types.
Equations
- Aesop.pinfEq x y = (Aesop.pinfEq.unsafe_impl_1 x y || Aesop.pinfEqCore x y)
Instances For
Compute the PINF hash of an expression in PINF. The hash ignores binder
names, binder info and proofs marked by mdataPINFIsProofName
.
Compute the PINF hash of an expression in PINF. The hash ignores binder
names, binder info and proofs marked by mdataPINFIsProofName
.
Equations
- Aesop.pinfHash e = runST fun (x : Type) => (Aesop.pinfHashCore e).run' ∅
Instances For
Equations
- Aesop.instInhabitedPINFRaw = { default := { toExpr := default } }
Equations
- Aesop.instBEqPINFRaw = { beq := fun (x y : Aesop.PINFRaw md) => Aesop.pinfEq x.toExpr y.toExpr }
Equations
- Aesop.instHashablePINFRaw = { hash := fun (x : Aesop.PINFRaw md) => Aesop.pinfHash x.toExpr }
Equations
- Aesop.instToStringPINFRaw = { toString := fun (x : Aesop.PINFRaw md) => toString x.toExpr }
Equations
- Aesop.instToFormatPINFRaw = { format := fun (x : Aesop.PINFRaw md) => Std.format x.toExpr }
Equations
- Aesop.instToMessageDataPINFRaw = { toMessageData := fun (x : Aesop.PINFRaw md) => Lean.toMessageData x.toExpr }
An expression in PINF at reducible
transparency.
Instances For
Equations
- Aesop.instInhabitedRPINFCache = { default := { map := default } }
Equations
- Aesop.instEmptyCollectionRPINFCache = { emptyCollection := { map := ∅ } }
An expression in PINF at transparency md
, together with its PINF hash as
computed by pinfHash
.
Instances For
Equations
- Aesop.instInhabitedPINF = { default := { toExpr := default, hash := default } }
Equations
- Aesop.instBEqPINF = { beq := fun (x y : Aesop.PINF md) => Aesop.pinfEq x.toExpr y.toExpr }
Equations
- Aesop.instHashablePINF = { hash := fun (x : Aesop.PINF md) => x.hash }
Equations
- Aesop.instOrdPINF = { compare := fun (x y : Aesop.PINF md) => if (x == y) = true then Ordering.eq else if x.toExpr.lt y.toExpr = true then Ordering.lt else Ordering.gt }
Equations
- Aesop.instToStringPINF = { toString := fun (x : Aesop.PINF md) => toString x.toExpr }
Equations
- Aesop.instToFormatPINF = { format := fun (x : Aesop.PINF md) => Std.format x.toExpr }
Equations
- Aesop.instToMessageDataPINF = { toMessageData := fun (x : Aesop.PINF md) => Lean.toMessageData x.toExpr }
An expression in RPINF together with its RPINF hash.