Expand field abbreviations. Example: { x, y := 0 }
expands to { x := x, y := 0 }
Instances For
- stx : Lean.Syntax
- structName : Lake.Name
Instances For
- implicit : Option Lean.Syntax
Instances For
Instances For
- fieldName: Lean.Syntax → Lake.Name → Lean.Elab.Term.StructInst.FieldLHS
- fieldIndex: Lean.Syntax → Nat → Lean.Elab.Term.StructInst.FieldLHS
- modifyOp: Lean.Syntax → Lean.Syntax → Lean.Elab.Term.StructInst.FieldLHS
Instances For
- term: {σ : Type} → Lean.Syntax → Lean.Elab.Term.StructInst.FieldVal σ
- nested: {σ : Type} → σ → Lean.Elab.Term.StructInst.FieldVal σ
- default: {σ : Type} → Lean.Elab.Term.StructInst.FieldVal σ
Instances For
- ref : Lean.Syntax
Instances For
Instances For
- mk: Lean.Syntax →
Lake.Name →
Array (Lake.Name × Lean.Expr) →
List (Lean.Elab.Term.StructInst.Field Lean.Elab.Term.StructInst.Struct) →
Lean.Elab.Term.StructInst.Source → Lean.Elab.Term.StructInst.Struct
Remark: the field
params
is use for default value propagation. It is initially empty, and then set atelabStruct
.
Instances For
Instances For
Instances For
true
iff all fields of the given structure are marked as default
Instances For
Instances For
Instances For
Instances For
Instances For
Instances For
Instances For
Instances For
Instances For
- val : Lean.Expr
- struct : Lean.Elab.Term.StructInst.Struct
- instMVars : Array Lean.MVarId
Instances For
- structs : Array Lean.Elab.Term.StructInst.Struct
- maxDistance : Nat
Consider the following example:
structure A where x : Nat := 1 structure B extends A where y : Nat := x + 1 x := y + 1 structure C extends B where z : Nat := 2*y x := z + 3
And we are trying to elaborate a structure instance for
C
. There are default values forx
atA
,B
, andC
. We say the default value atC
has distance 0, the one atB
distance 1, and the one atA
distance 2. The fieldmaxDistance
specifies the maximum distance considered in a round of Default field computation. Remark: sinceC
does not set a default value ofy
, the default value atB
is at distance 0.The fixpoint for setting default values works in the following way.
- Keep computing default values using
maxDistance == 0
. - We increase
maxDistance
whenever we failed to compute a new default value in a round. - If
maxDistance > 0
, then we interrupt a round as soon as we compute some default value. We use depth-first search. - We sign an error if no progress is made when
maxDistance
== structure hierarchy depth (2 in the example above).
- Keep computing default values using
Instances For
Instances For
Instances For
Instances For
Instances For
Instances For
Reduce default value. It performs beta reduction and projections of the given structures.