@@ -100,53 +100,6 @@ rebuildEnv xs (Drop rest) (y :: env) = y :: rebuildEnv xs rest env
102-- -------------------------------------------------- [ The Effect EDSL itself ]
102-- -------------------------------------------------- [ The Effect EDSL itself ]
103−-- some proof automation
106−reflectListEffElem : List a -> Tactic
107−reflectListEffElem [] = Refine "Here" `Seq` Solve
108−reflectListEffElem (x :: xs)
109− = Try (Refine "Here" `Seq` Solve)
110− (Refine "There" `Seq` (Solve `Seq` reflectListEffElem xs))
112−-- The evaluator needs a 'function case' to know its a reflection function
113−-- until we propagate that information! Without this, the _ case won't get
115−reflectListEffElem (x ++ y) = Refine "Here" `Seq` Solve
116−reflectListEffElem _ = Refine "Here" `Seq` Solve
119−reflectSubList : List a -> Tactic
120−reflectSubList [] = Refine "subListId" `Seq` Solve
121−reflectSubList (x :: xs)
122− = Try (Refine "subListId" `Seq` Solve)
123− (Try (Refine "Keep" `Seq` (Solve `Seq` reflectSubList xs))
124− (Refine "Drop" `Seq` (Solve `Seq` reflectSubList xs)))
125−reflectSubList (x ++ y) = Refine "subListId" `Seq` Solve
126−reflectSubList _ = Refine "subListId" `Seq` Solve
129−reflectDefaultList : List a -> Tactic
130−reflectDefaultList [] = Refine "enil" `Seq` Solve
131−reflectDefaultList (x :: xs)
132− = Refine "econs" `Seq`
135− (Refine "default" `Seq`
138− (reflectDefaultList xs))))))
139−reflectDefaultList (x ++ y) = Refine "Nil" `Seq` Solve
140−reflectDefaultList _ = Refine "Nil" `Seq` Solve
143−reflectEff : (P : Type) -> Tactic
144−reflectEff (EffElem m a xs)
145− = reflectListEffElem xs `Seq` Solve
146−reflectEff (SubList xs ys)
147− = reflectSubList ys `Seq` Solve
148−reflectEff (Env m xs)
149− = reflectDefaultList xs `Seq` Solve
151updateResTy : (val : t) ->
104updateResTy : (val : t) ->
152 (xs : List EFFECT) -> EffElem e a xs -> e t a b ->
105 (xs : List EFFECT) -> EffElem e a xs -> e t a b ->
@@ -269,7 +222,8 @@ eff {xs = [l ::: x]} env (l :- prog) k
269 eff env' prog (\p', envk => k p' (relabel l envk))
222 eff env' prog (\p', envk => k p' (relabel l envk))
271-- yuck :) Haven't got type class instances working nicely in tactic
224-- yuck :) Haven't got type class instances working nicely in tactic
225+-- proofs yet, and 'search' can't be told about any hints yet,
272−-- proofs yet, so just brute force it.
226+-- so just brute force it.
273syntax MkDefaultEnv = with Env
227syntax MkDefaultEnv = with Env
274 (| [], [default], [default, default],
228 (| [], [default], [default, default],
275 [default, default, default],
229 [default, default, default],
@@ -281,7 +235,7 @@ syntax MkDefaultEnv = with Env
283lift' : Eff m t ys ys' ->
237lift' : Eff m t ys ys' ->
284− {default tactics { byReflection reflectEff; }
238+ {default tactics { search 100; }
285 prf : SubList ys xs} ->
239 prf : SubList ys xs} ->
286 Eff m t xs (\v => updateWith (ys' v) xs prf)
240 Eff m t xs (\v => updateWith (ys' v) xs prf)
287lift' e {prf} = lift prf e
241lift' e {prf} = lift prf e
@@ -289,7 +243,7 @@ lift' e {prf} = lift prf e
290effect' : {a, b: _} -> {e : Effect} ->
244effect' : {a, b: _} -> {e : Effect} ->
291 (eff : e t a b) ->
245 (eff : e t a b) ->
292− {default tactics { byReflection reflectEff; }
246+ {default tactics { search 100; }
293 prf : EffElem e a xs} ->
247 prf : EffElem e a xs} ->
294 Eff m t xs (\v => updateResTy v xs prf eff)
248 Eff m t xs (\v => updateResTy v xs prf eff)
295effect' e {prf} = effect prf e
249effect' e {prf} = effect prf e