Browse Source

Working lo_reduction, cbv and cbn

master
julia 2 years ago
parent
commit
8119433b0a
  1. 15
      lambda.ml

15
lambda.ml

@ -83,7 +83,20 @@ let is_value = function
| Var _ -> true
| _ -> false
(* Réduit d'un pas les termes par l'extérieur puis l'intérieur *)
(* Vérifie si un lambda est linéaire, i.e. qu'il n'y a qu'une seule occurence de son paramètre *)
let rec count_freevars x = function
| Lambda (y, t) -> count_freevars x t
| App (t, u) -> (count_freevars x t) + (count_freevars x u)
| Var y -> if x = y then 1 else 0
let rec is_linear = function
| Lambda (x, t) -> (count_freevars x t) = 1 && is_linear t
| App(t, u) -> is_linear t && is_linear u
| Var x -> true
(* Réduit d'un pas les termes par l
'extérieur puis l'intérieur *)
let rec lo_reduction = function
| App ( Lambda (x, t), u) as redex -> (beta redex)
| App (Var x, (_ as t)) -> App (Var x, lo_reduction t)

Loading…
Cancel
Save