fact: Fixpoint subst (x : string) (s : tm) (t : tm) : tm := match t with | tm_var y => if String.eqb x y then s else t | <{\y:T, t1}> => if String.eqb x y then t else <{\y:T, [x:=s] t1}> | <{t1 t2}> => <{([x:=s] t1) ([x:=s] t2)}> | <{true}> => <{true}> | <{false}> => <{false}> | <{if t1 then t2 else t3}> => <{if ([x:=s] t1) then ([x:=s] t2) else ([x:=s] t3)}> end where "'[' x ':=' s ']' t" := (subst x s t) (in custom stlc).
imports: QuickChick(QuickChick) Coq(Nat) Coq(Arith.Arith) Coq(Logic.FunctionalExtensionality)