コード例 #1
0
 def test_swap(self):
     term = parse(
         f"((lambda x (pair (snd x) (fst x))) (pair (lambda x x) {K}))")
     swap_type = parse_type("(* (-> a (-> b a)) (-> a a))")
     normal_form = normalise(swap_type, term)
     self.assertEqual(str(normal_form),
                      "(pair (lambda a (lambda b a)) (lambda c c))")
コード例 #2
0
ファイル: test_generate.py プロジェクト: decb/stlc-py
 def test_i(self):
     term = generate(parse_type("(-> a a)"))
     self.assertEqual(str(term), "(lambda a a)")
コード例 #3
0
ファイル: test_generate.py プロジェクト: decb/stlc-py
 def test_composition(self):
     term = generate(parse_type(
         "(-> (-> a b) (-> (-> b c) (-> a c)))"))
     self.assertEqual(
         str(term),
         "(lambda a (lambda b (lambda c (b (a c)))))")
コード例 #4
0
ファイル: test_generate.py プロジェクト: decb/stlc-py
 def test_product_associativity(self):
     term = generate(parse_type("(-> (* a (* b c)) (* (* a b) c))"))
     self.assertEqual(
         str(term),
         "(lambda a (pair (pair (fst a) (fst (snd a))) (snd (snd a))))")
コード例 #5
0
ファイル: test_generate.py プロジェクト: decb/stlc-py
 def test_currying(self):
     term = generate(parse_type(
         "(-> (-> (* a b) c) (-> a (-> b c)))"))
     self.assertEqual(
         str(term),
         "(lambda a (lambda b (lambda c (a (pair b c)))))")
コード例 #6
0
ファイル: test_generate.py プロジェクト: decb/stlc-py
 def test_swap(self):
     term = generate(parse_type("(-> (* a b) (* b a))"))
     self.assertEqual(str(term), "(lambda a (pair (snd a) (fst a)))")
コード例 #7
0
ファイル: test_generate.py プロジェクト: decb/stlc-py
 def test_s(self):
     term = generate(parse_type(
         "(-> (-> a (-> b c)) (-> (-> a b) (-> a c)))"))
     self.assertEqual(
         str(term),
         "(lambda a (lambda b (lambda c ((a c) (b c)))))")
コード例 #8
0
 def test_eta_long(self):
     term = parse(SKK)
     a_to_b_squared = parse_type("(-> (-> a b) (-> a b))")
     normal_form = normalise(a_to_b_squared, term)
     self.assertEqual(str(normal_form), "(lambda a (lambda b (a b)))")
コード例 #9
0
 def test_skk(self):
     term = parse(SKK)
     a_to_a = parse_type("(-> a a)")
     normal_form = normalise(a_to_a, term)
     self.assertEqual(str(normal_form), "(lambda a a)")