| class Vec (X : Type u) | |
| class IsLin {X Y} [Vec X] [Vec Y] (f : X → Y) | |
| structure ℝ where | |
| value : Float | |
| instance instFoo1 {X : Type u} {Y : Type v} [Vec X] [Vec Y] : Vec (X × Y) := sorry | |
| instance instProblem {α : Type u} {X : Type v} [Vec X] : Vec (α → X) := sorry | |
| instance (priority := default+1) instFoo2 : Vec ℝ := sorry | |
| -------------- | |
| instance comp_is_lin {X Y Z : Type} [Vec X] [Vec Y] [Vec Z] | |
| (f : Y → Z) (g : X → Y) [IsLin f] [IsLin g] | |
| : IsLin (λ x => f (g x)) := sorry | |
| ---------------- | |
| class Trait (X : Type u) where | |
| R : Type v | |
| attribute [reducible] Trait.R | |
| class SemiInner (X : Type u) (R : outParam (Type v)) where | |
| semiInner : X → X → R | |
| @[reducible] instance (X) (R : Type u) [SemiInner X R] : Trait X := ⟨R⟩ | |
| class SemiHilbert (X) (R : outParam (Type u)) [Vec R] [Vec X] extends SemiInner X R | |
| instance (X R) [Trait X] [Vec R] [Vec X] [SemiHilbert X R] (ι : Type v) : SemiHilbert (ι → X) R := sorry | |
| instance : SemiHilbert ℝ ℝ := sorry | |
| -------------- | |
| def norm {X} [Trait X] [inst : SemiInner X (Trait.R X)] (x : X) : Trait.R X := sorry | |
| def sum {n} (f : Fin n → ℝ) : ℝ := sorry | |
| variable (n m : Nat) | |
| -- these all should work | |
| example : Trait (Fin n → Fin m → ℝ) := by infer_instance | |
| example : SemiInner ℝ (Trait.R ℝ) := by infer_instance | |
| example : SemiHilbert (Fin n → ℝ) ℝ := by infer_instance | |
| example : SemiHilbert (Fin n → ℝ) (Trait.R ℝ) := by infer_instance | |
| example : Trait (Fin n → Fin m → (Trait.R ℝ)) := by infer_instance | |
| example : SemiHilbert (Trait.R ℝ) ℝ := by infer_instance | |
| -- set_option synthInstance.maxHeartbeats 50 in | |
| -- set_option pp.explicit true in | |
| -- set_option trace.Meta.synthInstance true in | |
| -- This should not timeout but failt in finite number of steps like in Lean 3 | |
| example : IsLin (λ (x : ℝ) => sum λ i : Fin n => norm x) := by infer_instance |