- | (C.Prod (n1,s1,t1), C.Prod (_,s2,t2)) ->
- let subst',metasenv',ugraph1 =
- fo_unif_subst true subst context metasenv s1 s2 ugraph
- in
- fo_unif_subst test_equality_only
- subst' ((Some (n1,(C.Decl s1)))::context) metasenv' t1 t2 ugraph1
- | (C.Prod _, _) ->
- (match CicReduction.whd ~subst context t2 with
- | C.Prod _ as t2 ->
- fo_unif_subst test_equality_only subst context metasenv t1 t2 ugraph
- | _ -> raise (UnificationFailure (lazy (CicMetaSubst.ppterm ~metasenv subst t2^"Not a product"))))
- | (_, C.Prod _) ->
- (match CicReduction.whd ~subst context t1 with
- | C.Prod _ as t1 ->
- fo_unif_subst test_equality_only subst context metasenv t1 t2 ugraph
- | _ -> raise (UnificationFailure (lazy (CicMetaSubst.ppterm ~metasenv subst t1^"Not a product"))))